• Skip to main content
  • Skip to search
  • Skip to footer
Cadence Home
  • This search text may be transcribed, used, stored, or accessed by our third-party service providers per our Cookie Policy and Privacy Policy.

  1. Community Forums
  2. Custom IC Design
  3. spectre tran simulation and multithreading

Stats

  • Locked Locked
  • Replies 4
  • Subscribers 125
  • Views 18041
  • Members are here 0
This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

spectre tran simulation and multithreading

marcelpreda
marcelpreda over 6 years ago

Hi there,

Some experience with spectre transient simulatin and multithreding?

I've just made some tests , mmsim 15.1.0, but I don't see big difference between 1xcpu and 4xcpu on machines with identical CPUs:

1xCPU: Time used: CPU = 10.2 ks (2h 49m 49s), elapsed = 10.2 ks (2h 50m 21s), util. = 99.7%.

4xCPU: Time used: CPU = 9.96 ks (2h 45m 59s), elapsed = 9.98 ks (2h 46m 25s), util. = 99.7%.

Why I'm asking this: right now the simulation is started via a ocean script,hostMode(local) because I what to have the simulation running in blocking mode , I need to know when it finished to trigger some post processing script. 

I have a request to add the possibility to set number of CPUs. I want to know if the effort makes sense.

My understating is that I cannot specify numbers of cpus in local mode , s I have to go in distributed mode, and in our environment I have to use ?drmsCmd mechanism.

The drmsCmd is nonblocking and it means that I have to implement also a monitoring process to know when the simulation ends.

Further more with the 'local' mode I have full control on where to create the psf directory passing to the ocean script the ResultsDir as argument I will have the sim results in : ResultsDir"/psf" , with distributed I have to take care also about the possible job renaming.

Important: there is just one transient simulation.

Thank you,

Marcel

  • Cancel
  • Andrew Beckett
    Andrew Beckett over 6 years ago

    Hi Marcel,

    A few points about what you've said above:

    1. Setting the number of cores in distributed mode doesn't affect the number of threads that APS uses (by default), so that may be why you are not seeing any difference in performance
    2. Spectre is not multi-threaded - only APS (and XPS) are - you have to enable APS (or ++aps) to do this and probably specify the number of threads suitably.
    3. This means in your OCEAN script you should use something like:
      option( ?categ 'turboOpts
          'numThreads "4"
          'mtOption "Manual"
          'uniMode "APS"
      )
      You could (if using distributed mode and using Sun Grid Engine or LSF) put "sge" or "lsf" or "farm" as the value of 'numThreads, but that will only work if using distributed mode
    4. When using drmsCmd, you should be able to use run(?block t) to cause it to block so you don't have to wait via another mechanism.
    5. It would be wise to move to a newer version than MMSIM15.1 - very little reason to use a 3-4 year old version of the simulator. Simulation technology continues to advance, and in particular there were some advances in SPECTRE16.1 which meant that there was better utilisation fo the underlying compute resource that should give you a speed improvement
    6. Of course, this is assuming that your circuit is big enough to reasonably take advantage of multi-threading. Very small circuits won't (e.g. less than about 1K devices).

    Regards,

    Andrew.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • marcelpreda
    marcelpreda over 6 years ago in reply to Andrew Beckett

    Hi Andrew,

    Thanks a lot for detailed info.

    Regarding #1, #2 and #3:

    In my case was no ++aps, probable because of that was no difference between the runs.

    Regarding the #4 , run(?block t) when I've read the ocean script documentation I see:

    A DRMS (Distributed Resource Management System)
    command, such as a bsub command for LSF or a qsub
    command for SGE (Sun Grid Engine) used to submit a job.
    When this argument is used, all other arguments, except
    ?jobName will be ignored. Moreover, it will not be possible to
    call the OCEAN function wait on the jobs submitted using
    this argument.
    To know more about the command option, refer to the
    section Submitting a Job in the chapter Using the Distributed
    Processing Option in the Analog Design Environment of the
    Virtuoso Analog Distributed Processing OptionUser Guide.

    So, my understating is that ?block will be accepted, but it has no effect.

    Regarding #5mmsim version 15.1: That's the minimum version that I have to support and I can not decide it - it is a request. I just wanted to be sure that I'm not using features which were not implemented on 15.1

    #6. My test case was big enough, it is in order of x10K devices. 

    BR,

    Marcel

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Andrew Beckett
    Andrew Beckett over 6 years ago in reply to marcelpreda

     Hi Marcel,

    Not sure from your initial comment on #1,#2,#3 whether you had APS and multithreading set up (and just not ++aps) - if you did and still were only getting less than 100% utilisation with a design with 10K devices, then you should contact customer support so we can investigate.

    You're quite right about the ?block t not working with ?drmsCmd. Oversight on my part. You can workaround this by using a blocking ?drmsCmd instead though - the reason why ?block t doesn't work is that it does this by monitoring the job id and that isn't available when you're using ?drmsCmd - only with the natively supported integrations of SGE or LSF (or LBS).

    Regards,

    Andrew.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • marcelpreda
    marcelpreda over 6 years ago in reply to Andrew Beckett

    Hi Andrew,

    My mistake, when I've wrote '++aps' I've meant '+aps' . In other words I had no APS activated.

    Best Regards,

    Marcel

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel

Community Guidelines

The Cadence Design Communities support Cadence users and technologists interacting to exchange ideas, news, technical information, and best practices to solve problems and get the most from Cadence technology. The community is open to everyone, and to provide the most value, we require participants to follow our Community Guidelines that facilitate a quality exchange of ideas and information. By accessing, contributing, using or downloading any materials from the site, you agree to be bound by the full Community Guidelines.

© 2025 Cadence Design Systems, Inc. All Rights Reserved.

  • Terms of Use
  • Privacy
  • Cookie Policy
  • US Trademarks
  • Do Not Sell or Share My Personal Information