I am using Cadence 6.1.5 and spectre to run transient simulations. I wish to run parametric simulations on a few variables in my design.
The workstation I have access to has 32 cores and typically more than half of them are free.
May I know how I can set the parametric simulations in a way that parallel transient simulations can be run simutaneously by different cores? Like each core runs a simulation in which the variables take on different values?
Thank you in advance.
If you have access to ADE XL, you can define a parametric simulation by importing an already existing ADE L state or creating a test with a design variable, which you can parameterize by adding a variable specification in the ADE XL "Data View". In the run summary, you can verify the number of sweep points by inspecting the "Run Summary" where it'll report "N Point Sweeps" where N is the number of parametric simulations you have defined
Then, under Options -> Job Setup you can define the distribution method to be local and increase the number of jobs to the number of processor cores you have. This will ensure ADE XL creates parallel jobs for your parametric simulations, and it'll take considerably less time than serializing the jobs. However, I have found that it's better to use the number of physical processor cores than the number of cores provided by hyperthreading; the former usually yields faster simulation times for me.
Using ADE XL is the simplest approach, but another possibility is to set up distributed simulation in ADE L - doesn't need to be very distributed though ;-)
For example, I do this sometimes on my machine (mainly for testing or demo purposes). Create a file, queue_config, with this contents:
myqueue 1localhost 4
In this file, the first line gives the name of the queue and the number of machines contained within that queue (I just used localhost, as that's always the local machine). Then the number after the localhost is the number of parallel jobs that can be run in that queue. You can define multiple queues if you want, or involve other machines - for that read the Distributed Processing guide in the documentation.
Then run "cdsqmgr /path/to/queue_config".
setenv LBS_CLUSTER_MASTER localhost
depending on the shell you're using (csh for the first, bash/ksh for the second).
And then run virtuoso - and in ADE L, under Setup->Simulator/Dir/Host pick distributed simulation.
That's it really - not too complicated.
That said, if you are sharing the compute resource with others, this should be set up more centrally because only one cdsqmgr can be run at once (see the docs for more detail, again). If you need to change the config file, you'll need to kill cdsqmgr and restart it.
But the ADE XL approach is probably simpler!
Thank you very much. Your solution works.
It did speed up my simulation tremendously.
I followed your instruction for ADE L but I get the following problem when I run
the parametric simulation:
I have a design variable that is dependent on the parametric simulation sweeping
var_word = 1 // sweeping variable
var_bit_1 = ((var_word & 1)/1)
var_bit_2 = ((var_word & 2)/2)
If I run a serial parametric simulation, everything is fine. But if I run a
parallel parametric simulation, I get the following error:
*Error* in the Design Variables. AEL's message: data type error
on first operand: operator not defined for
Is there something that I missed?