• 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. Slow down when opening many results

Stats

  • Locked Locked
  • Replies 4
  • Subscribers 143
  • Views 12981
  • 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

Slow down when opening many results

Simon T
Simon T over 4 years ago

Hi,
I am using SKILL with the OCEAN extension to process my spectre simulation results.
I have many of these to go over (in the 1000, sometimes 10k < ).
I use the closeResults function and that already gave me a good speed up.
None the less there is a big slow down throughout the processing time.
Something must be building up in the background.
I also write cliped traces to a file and close it once I go to the next step. Because the files are constantly getting bigger I dont think the filebuffer is causing the issue.

Does someone might know how to process a huge pile of results?

Kind regards,
Simon

  • Cancel
  • Andrew Beckett
    Andrew Beckett over 4 years ago

    Hi Simon,

    There are a lot of possible places which could be responsible for this slow down, and it could be dependent upon:

    1. The version you're using
    2. The nature of the results you're loading (what kind of data, the size of each waveform object)
    3. Your code - whether it is doing stuff efficiently or not, or whether it is creating a lot of data that cannot be garbage collected
    4. Virtuoso itself, of course

    If you have access to it, running the SKILL profiler might help identify the bottlenecks, but I would advise contacting customer support so that an application engineer can look at this with you. Feel free to reference this post to the application engineer and note that I would be happy to help with trying to identify the bottlenecks (after the basics have been checked - you're using recent versions, your code is not accidentally responsible itself for the slowdown). They can then contact me and loop me in.

    Regards,

    Andrew.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Simon T
    Simon T over 4 years ago in reply to Andrew Beckett

    Fullscreen forum_example.txt Download
    samples_per_miss = 1000
    
    
    (procedure (abWaveToList wave @key transpose)
        (let (xList yList xyList len
                (xVec (drGetWaveformXVec wave))
                (yVec (drGetWaveformYVec wave))
            )
            (setq len (drVectorLength xVec))
            ;-----------------------------------------------------------------
            ; Return value of this if is the list
            ;-----------------------------------------------------------------
            (if transpose
                (progn
                (for i 0 (sub1 len)
                    (setq xList (tconc xList (drGetElem xVec i)))
                    (setq yList (tconc yList (drGetElem yVec i)))
                )
                (list (car xList) (car yList))
            )
            ; else
                (progn
                (for i 0 (sub1 len)
                    (setq xyList (tconc xyList (list (drGetElem xVec i)
                    (drGetElem yVec i))))
                )
                (car xyList)
                )
            ) ; if
        ) ; let
    ) ; procedure
    
    
    data_path = sprintf(nil "%s/data" cur_path)
    if( (isDir data_path) (is_dir_created = t) (is_dir_created = createDir(data_path)) )
    if( (is_dir_created == nil) printf("Could not create dir: %s\n" data_path) )
    
    
    for(i 1 8
        res_file = outfile(sprintf(nil "%s/data/timging_file.csv" cur_path) "w")
    
        trace_file = outfile(sprintf(nil "%s/traces_out.dat" data_path) "w")
    
        for(sample_idx 0 samples_per_miss
    
            cur_res_path = sprintf(nil "%s/simulations/out/spec_sim.raw" cur_path)
    
            is_res_open = openResults(cur_res_path)
            if( (is_res_open == nil) printf("Could not open result: %s\n" cur_res_path ))
            selectResult('"tran-tran")
            
            latency = cross( v( "node_of_interest" ) ((atof cur_volt)/2) 1 'falling ) - start
            latency = latency / 1e-9
    
    
            trace = getData("node_of_interest")
            trace = lshift(trace start)
            trace = clip(trace 0 2n)
            trace_as_list = abWaveToList(trace)
    
            fprintf(trace_file "Time[ns] volts\n")
            foreach( point trace_as_list
                fprintf(trace_file "%.16f %.16f\n" (car(point) / 1e-9) nth(1 point))
            )
            fprintf(trace_file "\n")
            
            fprintf(res_file "%2.16f\n" latency)
    
            closeResults(cur_res_path)
        )
        close(res_file)
    )
    

    Hi Andrew,

    Thanks for your inital pointer. I am just now coming back to this issue because I got caught up in a bunch of other stuff before.  I would have liked to contacted the support but it is kind of complicated for me with europractice as I am just a regular student at a university.

    The version I am using: Version 18.1.0.077 64bit -- 1 Aug 2018

    I attached a cut down version of the script I am running. The speed is not heavilly influence if I also extract the traces or not. I think it is the loading of the .raw that dominates the runtime.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Andrew Beckett
    Andrew Beckett over 4 years ago in reply to Simon T

    Hi Simon,

    Perhaps you can contact Europractice support at http://www.europractice.stfc.ac.uk/contact_us.html - by all means say to them (and point them to my reply here) and say that I would be happy to look at this with you (it would be much easier to see your data, maybe via a screen sharing session).

    Andrew

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Simon T
    Simon T over 4 years ago

    This maybe sounds very dumb and obvious yet I have the small hope this helps someone else too.

    As of now it seem that the Viva Vizualize and Analyze GUI is the issue.
    Closing this and ONLY haveing the VIVA "command line" open did the trick for me.
    I no longer wittness a slow down even when I processed 50k + results (just by feeling, I did not profile).

    • 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