• 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 SKILL
  3. Waveforms opened from Assembler not garbage-collected properly...

Stats

  • Locked Locked
  • Replies 1
  • Subscribers 143
  • Views 10771
  • 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

Waveforms opened from Assembler not garbage-collected properly?

smikes
smikes over 4 years ago

I have an ADE Assembler bench that runs across a few modes and corners, saving some waveforms. I tried writing a script to generate and export plots after the sim is done. The script works fine, but while I was building it I was running it multiple times, and eventually started getting warnings that the system was low on memory. The combined results databases for the sim are 5.8GB.

On startup, my Virtuoso session uses less than 1GB. I simplified the script to just the part that creates a couple waveforms:

testName = "TRAN"
sess = axlGetWindowSession()
hist = axlGetCurrentHistory(sess)
resultsDir = axlGetHistoryResultsDir(hist)
openResults(strcat(resultsDir "/psf/" testName))
Rdiv = clip(vtime('tran "/Tout")/vtime('tran "/Tin") 4.4n nil)
Fin = clip(1/vtime('tran "/Tin") 4.4n nil)
closeResults(resultsDir)

After running this one time, memory usage jumps to 15GB (not sure if this is reasonable or not for the two waveforms, there are 153 total transient sims of different lengths)

I ran the code above multiple times, this shows the memory usage after the 1st, 2nd, and so on

    PID USER     %MEM        RSS COMMAND

20607 stevenm  23.1   15299552 virtuoso

20607 stevenm  47.8   31544408 virtuoso

20607 stevenm  58.4   38564348 virtuoso

20607 stevenm  83.1   54870100 virtuoso

Why is this happening? Shouldn't the garbage collector be freeing the old memory when the variables are re-assigned?

$> virtuoso -W

sub-version  ICADVM20.1-64b.500.16

  • Cancel
  • Andrew Beckett
    Andrew Beckett over 4 years ago

    It's not quite as simple as garbage collection of the variables triggering this. There's some caching of waveform data to avoid re-reading the waveforms from disk, and the actual waveform object itself is small - it's just a pointer to two vectors plus some attributes. In general, closing the ViVA window helps, plus closing the ADE session, but I think it's probably going to be worth you contacting customer support so that this can be investigated together with an application engineer. Whilst things have got better in terms of memory growth for cases like this in versions throughout ICADVM18.1/20.1, there's a tradeoff of not deteriorating performance by closing and flushing data too quickly. We may not have got that tradeoff right for your situation, but it would be good to explore that in your case.

    Andrew

    • 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