Sometimes these articles just write themselves...
Last week, 3 different people asked me questions about the ADE XL Run Options form. Sadly, the odds that 3 people in the same week would ask a question to which I actually knew the answer are vanishingly slim, so that meant I needed to do some research. And, in the course of that research, I discovered why there were so many questions about this topic. It is quite confusing and the documentation seems to make sense only after you thoroughly understand the subject.
Sounds like something that needs to be blogged -- if only so I have a place I can go to look up the answer the next time someone asks me that question.
So, here we go. We're talking about 2 forms here. The first, the Job Policy Setup form, is accessed by selecting Options->Job Setup from the ADE XL window. The second, where most of the confusion seems to come in, is the Run Options form, accessed by selecting Options->Run Options. Here they are for reference...
The upper part of the Job Policy Setup form concerns how you want to distribute your simulation runs in ADE XL. This will vary depending on what type of job distribution system your company uses (LSF, SGE, etc.). We'll take that up another time. For now, let's just assume you have some sort of system that lets you fire off simulations onto a farm of machines.
Now we need to define some terms:
The way ADE XL works is that each run starts a number of jobs (actually the process is called "ICRP") on whatever machines you tell it to use (local, SGE, LSF, etc). It uses the "Max. Jobs" field on the Job Policy Setup form to determine the maximum number of those jobs to start.
Those processes stay alive for some "linger time" so that ADE XL can more efficiently start new simulations as needed. So it will start by sending out a simulation to each job, and then as each simulation completes, it will send that job a new simulation until all simulations in the run are completed.
Remember that. A "job" is assigned to a particular "run" and will likely receive a series of simulations to perform (assuming the "run" involves more than a single simulation).
Let's skip to the Run Options form now.
The default in the Run Options form is Serial - i.e. if you hit the green Run button twice, the second run will not use any jobs until the first run completes.
If you set this to Parallel, if you hit the green Run button twice, the runs will start in parallel. They will either share resources equally (which means if Max Jobs = 10, each run will use 5 jobs). Or you can specify - something like 3 jobs per run.
This applies to all run modes--corners, sweeps, Monte Carlo, optimization, etc.
So - for any given run, all jobs run in parallel. However multiple runs in ADE XL are serial by default and can be made parallel.
Now, what about the fields at the bottom of the Job Policy Setup form--For Multiple Runs (reassign immediately or wait until currently running points complete)?
Let's say your setup is:
You start a run and the simulations are going to take 10 minutes. All ten jobs start running the simulations.
Now you start another run after making some changes to the setup.
So -- the question is -- do you want to immediately kill five of the current jobs and re-assign them to the second run or do you want to wait until the first five currently running simulations finish before re-assigning the jobs to the second run.
(Don't worry, the simulations that were killed will be assigned to re-run on one of the (now) five jobs assigned to the first run)
It's an efficiency issue. Do you want to waste the progress already made by the jobs on a simulation or do you want to make sure the subsequent run(s) start right away?
I hope this is a bit enlightening. You may need to read the above a couple of times until it becomes clear (I know I did).
Hi, Yes, by default you will get a run directory for each corner. To help with disk space, you can set the environment variable: envSetVal("adexl.simulation" "ignoreDesignChangesDuringRun" 'boolean t) in your .cdsinit file. This will do the netlisting up front once for each test and create symbolic links for redundant files in each run directory.
Hi Stacy, Very informative article. I have a ques wrt to job distribution system. As to how exactly is it done. We use Sungrid for the distribution. I notice that there is netlisting done for each distributed job (corner/parametric sim) and hence for each corner the AMAP folder is created (Unlike the case of a locally run job). Thus hugely multiplying the space. Is there a way to eliminate this? Also, is the job distribution done in a similar way in IC615 and IC5141 as i use the latter? Could you please do a blog on this as well.. Would be of great help!
There is an extensive set of Skill API commands useful for interacting with ADE XL. Refer to the Virtuoso Analog Design Environment XL SKILL Reference manual.
The commands you are looking involve setting up a pre-run trigger function, which can be done using the command "axlSessionConnect". This also allows you to create triggers into many other events in the ADE XL environment.
The function can be integrated into every ADE XL session using the command "axlSessionRegisterCreationCallback".
Something like (apologies to the person from whom I've plagiarized this):
(define (RegisterPreRunCallback session_name)
(axlSessionConnect session_name "preRun" 'PreRun))
;; when ADE XL creates a new session it will call the RegisterPreRunCallback
(define (PreRun session_name sdb_handle mode_string test_name)
(printf "Launching a new run %L %L %L %L\n" session_name sdb_handle mode_string test_name)
;; per-run customization goes here
Do you know what skill command I need to use for customize changes behind the green play button in ADEXL?
Make "hello" prompt on the CIW every play hit.
Not really. The number of simulation licenses is dictated by the "Max Jobs" setting in the Job Policy Setup form. The "run in series/parallel" options just control how those "Max Jobs" get distributed.
Licenses / Tokens - If I'm running standard Spectre simulations. Is is correct that setting the "Runs in series" option will only pull 1 spectre license OR 1 MMSIM token and use it each time a new run starts, but "Runs in parallel" will pull licenses/tokens for however many runs I'm trying to do at once? So, for say 3 simulation runs, series only takes 1 license/token, but parallel would pull 3.