R
Robert Rudolf
Guest
Hi,
I've got an interesting issue with not quite orthodox Monte Carlo
simulations using OCEAN. I'm using IC6.1.3.500.13, but with the legacy
IC5 Monte Carlo commands. The simulator is spectre.
I'm running particular Monte Carlo iterations at particular
temperatures. The relevant bit of the OCEAN script is basically like this:
monteCarlo(?numIters 1 ?startIter 12 ?nomRun nil ?seed 1234)
temp(80)
monteRun()
to evaluate iteration #12 at 80°C.
The above lines (with some design variable setting and result
calculations before and after) are executed repeatedly for different MC
parameters sets and temperatures. No results are accumulated - I just
look at the result of a particular iteration, do something with it and
then move on.
The problem I'm having is that as more simulations are run, they become
slower and slower. For instance:
iteration | temperature | time to execute (s)
----------+-------------+--------------------
0 21.0 5.0
1 18.7 5.5
2 33.6 6.0
3 12.1 6.6
4 17.4 7.2
....
The time it takes to run each consecutive MC parameter set increases
cumulatively, apparently without bounds. This effect creeps up to
several minutes after a few hundred iterations. It seems that this is
caused by the temperature changing from one MC run to the another,
because the problem does not occur when the temperature is set to the
same value for each run.
Even more curiously, setting the temperature to the same value in two or
more consecutive runs brings the execution time down to normal, but it
then goes up again to *where it left off*, e.g.
iteration | temperature | time to execute (s)
----------+-------------+--------------------
0 21.0 5.0
1 18.7 5.5
2 33.6 6.0
3 12.1 6.6
4 12.1 5.0
5 12.1 5.0
6 17.4 7.2 (not 5.5!)
....
This problem seems to only occur in Monte Carlo simulations, normal
(run()) simulations are fine. I also tried a one-point temperature sweep
in the monteCarlo() command instead of temp() with the same result. From
looking at the active processes, it seems that spectre itself does not
take longer to simulate, but that the additional time is taken up by
virtuoso, which is sitting there with 100% CPU load. However, there is
no significant increase in memory usage and there is no swapping going
on. Setting the design variables before and running operations on the
results after the simulation also seems to have no effect on this behaviour.
So, my questions are:
* What causes this behaviour and is there a simple way to get around it?
Or is this a case of PEBKAC?
* Is this positively not happening in OceanXL? I'm a bit reluctant to
move to OceanXL because it's a bit overkill for what I need and so far
the simple legacy "netlist in, no questions asked" operation works quite
well. But if that's the only clean way to get around it, I might give it
a shot.
Thanks a lot!
Robert
I've got an interesting issue with not quite orthodox Monte Carlo
simulations using OCEAN. I'm using IC6.1.3.500.13, but with the legacy
IC5 Monte Carlo commands. The simulator is spectre.
I'm running particular Monte Carlo iterations at particular
temperatures. The relevant bit of the OCEAN script is basically like this:
monteCarlo(?numIters 1 ?startIter 12 ?nomRun nil ?seed 1234)
temp(80)
monteRun()
to evaluate iteration #12 at 80°C.
The above lines (with some design variable setting and result
calculations before and after) are executed repeatedly for different MC
parameters sets and temperatures. No results are accumulated - I just
look at the result of a particular iteration, do something with it and
then move on.
The problem I'm having is that as more simulations are run, they become
slower and slower. For instance:
iteration | temperature | time to execute (s)
----------+-------------+--------------------
0 21.0 5.0
1 18.7 5.5
2 33.6 6.0
3 12.1 6.6
4 17.4 7.2
....
The time it takes to run each consecutive MC parameter set increases
cumulatively, apparently without bounds. This effect creeps up to
several minutes after a few hundred iterations. It seems that this is
caused by the temperature changing from one MC run to the another,
because the problem does not occur when the temperature is set to the
same value for each run.
Even more curiously, setting the temperature to the same value in two or
more consecutive runs brings the execution time down to normal, but it
then goes up again to *where it left off*, e.g.
iteration | temperature | time to execute (s)
----------+-------------+--------------------
0 21.0 5.0
1 18.7 5.5
2 33.6 6.0
3 12.1 6.6
4 12.1 5.0
5 12.1 5.0
6 17.4 7.2 (not 5.5!)
....
This problem seems to only occur in Monte Carlo simulations, normal
(run()) simulations are fine. I also tried a one-point temperature sweep
in the monteCarlo() command instead of temp() with the same result. From
looking at the active processes, it seems that spectre itself does not
take longer to simulate, but that the additional time is taken up by
virtuoso, which is sitting there with 100% CPU load. However, there is
no significant increase in memory usage and there is no swapping going
on. Setting the design variables before and running operations on the
results after the simulation also seems to have no effect on this behaviour.
So, my questions are:
* What causes this behaviour and is there a simple way to get around it?
Or is this a case of PEBKAC?
* Is this positively not happening in OceanXL? I'm a bit reluctant to
move to OceanXL because it's a bit overkill for what I need and so far
the simple legacy "netlist in, no questions asked" operation works quite
well. But if that's the only clean way to get around it, I might give it
a shot.
Thanks a lot!
Robert