Cadence® system design and verification solutions, integrated under our System Development Suite, provide the simulation, acceleration, emulation, and management capabilities.
System Development Suite Related Products A-Z
Cadence® digital design and signoff solutions provide a fast path to design closure and better predictability, helping you meet your power, performance, and area (PPA) targets.
Full-Flow Digital Solution Related Products A-Z
Cadence® custom, analog, and RF design solutions can help you save time by automating many routine tasks, from block-level and mixed-signal simulation to routing and library characterization.
Overview Related Products A-Z
Driving efficiency and accuracy in advanced packaging, system planning, and multi-fabric interoperability, Cadence® package implementation products deliver the automation and accuracy.
Cadence® PCB design solutions enable shorter, more predictable design cycles with greater integration of component design and system-level simulation for a constraint-driven flow.
An open IP platform for you to customize your app-driven SoC design.
Comprehensive solutions and methodologies.
Helping you meet your broader business goals.
A global customer support infrastructure with around-the-clock help.
24/7 Support - Cadence Online Support
Locate the latest software updates, service request, technical documentation, solutions and more in your personalized environment.
Cadence offers various software services for download. This page describes our offerings, including the Allegro FREE Physical Viewer.
Get the most out of your investment in Cadence technologies through a wide range of training offerings.
This course combines our Allegro PCB Editor Basic Techniques, followed by Allegro PCB Editor Intermediate Techniques.
Virtuoso Analog Design Environment Verifier 16.7
Learn learn to perform requirements-driven analog verification using the Virtuoso ADE Verifier tool.
Exchange ideas, news, technical information, and best practices.
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.
It's not all about the technlogy. Here we exchange ideas on the Cadence Academic Network and other subjects of general interest.
Cadence is a leading provider of system design tools, software, IP, and services.
I read a file which has 1386213 line or more , only read each line , it spend 7 minutes and above.
How can it speed up ?
procedure( QQ(file) prog( () inPort=infile(file) while( gets(inLine inPort)
........ ) ;if ) ;while inPort=nil ) ;prog) ;procedure
I doubt it's the reading part - it's probably whatever you're doing in the ... bit. I just created a file with 1500000 lines, and then used:
procedure( QQ(file) prog( () inPort=infile(file) while( gets(inLine inPort) t ) ;while inPort=nil ) ;prog) ;procedure
I ran this reading the file (over the network, not local disk) through the profiler, and got:
Function Name Total Inside------------- ----- ------TOTAL CPU Time (secs) 1.91 1.91QQ 1.41 0.14toplevel 1.41 0.00_gets 1.27 1.27gc 0.49 0.49
So as you can see, a total of 2 seconds.
I then generated a much bigger (longer lines) file with 1800000 lines (95Mbytes), and the profile results were:
Function Name Total Inside------------- ----- ------TOTAL CPU Time (secs) 3.58 3.58QQ 2.91 0.19toplevel 2.91 0.00_gets 2.72 2.72gc 0.67 0.67
I suggest you run the SKILL profiler to see where the bottleneck is.
In reply to Andrew Beckett:
I read a file which has 14844545 lines , It spend 7 mins , If case2 , it needs 7:50 mins , It through network to access. Not local disk.
If has another for loop and use parseString to remove \n , it needs more time. I can't do anything , just wait.
Q1:How to remove each line of \n ? I use parseString , It needs 50 sec ,
Q2:Can I use another way yo read file ?( I only know this way)
Q3:Can I separate file to many files to read ? (Not single file single line , Is multi-file single line)
procedure( QQ(file) prog( () inPort=infile(file) while( gets(inLine inPort) qq = parseString(inLine "\n") ;; case2
;t ;;case1 ) ;while inPort=nil ) ;prog) ;procedure
Thank you very much,
In reply to Charley Chen:
I'm a bit confused, because suddenly your file is 10 times bigger, and it still takes 7 minutes to read. I just tried reading one with 29097984 lines (i.e. roughly double yours ~ 29 million, and about 1.5Gbytes long), and in the version of QQ I used (without the parseString - so your case1) it took:
Function Name Total Inside------------- ----- ------TOTAL CPU Time (secs) 113.90 113.90toplevel 96.89 0.01QQ 96.88 5.17_gets 91.71 91.71gc 17.01 17.01
Less than 2 minutes to read such a huge file is not that bad. This is on my laptop (which is nearly 4 years old, so not state of the art, and on a 100Mbit/s ethernet link).
In your case2 (with the parseString) it takes:
Function Name Total Inside------------- ----- ------TOTAL CPU Time (secs) 148.23 148.23QQ 127.00 5.79toplevel 127.00 0.00parseString 67.29 67.29_gets 53.92 53.92gc 21.23 21.23
Interesting, the gets was quicker (not sure why), but parseString is taking a while. Even so, it's hardly slow.
I also tried this - similar:
procedure( QQ(file) prog( () inPort=infile(file) while( gets(inLine inPort) qq = substring(inLine 1 sub1(strlen(inLine)))
Function Name Total Inside------------- ----- ------TOTAL CPU Time (secs) 148.73 148.73QQ 122.53 11.56toplevel 122.53 0.00_gets 52.88 52.88substring 52.15 52.15gc 26.20 26.20strlen 3.40 3.40sub1 2.54 2.54
The above figures were for IC5141. In IC615 your "case2" example was quicker still:
Function Name Total Inside------------- ----- ------TOTAL CPU Time (secs) 119.28 119.28toplevel 119.28 0.01QQ 109.78 12.03parseString 57.11 57.11_gets 40.65 40.65gc 9.47 9.47parser 0.01 0.01
The formatting is all messed up, so it's hard for me to see what you're doing.
Also, why are you reading such enormous files? Seems an odd thing to be doing.
I need to read maybe thousand or ten thousand or G line from a file to do something.
But only read file and use parseString or parseString twice , It seems hangs up.
Now I want to break down to check what is the buttleneck.
That's what the profiler is for. Anyway, one thing that can happen is if you end up creating a lot of garbage - it can spend a lot of time in garbage collection (gc) - so usually the trick is to avoid creating garbage in the first place.
(1)How to use profiler ?
I remove a line with \n using parseString( nextLine "\n") and parseString(nextLine " ") to get data .
Is there any command is better to do it ?