There are several ways that Incisive Formal Verifier (IFV) can be set to evaluate properties in parallel. The bottom line is that customers using these “productivity flows” have been dramatically increasing their verification throughput – turning days into hours, and hours into minutes. In one customer case, what had been a 6 day run came in under 4 hours using this capability – a throughput improvement of 36X! This is post is all about how you can reproduce these same substantial results in your environment.
Productivity Flows Overview
There are three formal verification productivity flows supported:
· “Performance”: run assertions in parallel to increase wall clock run time performance.
· “Case Splitting”: split a large assertion or problem into many parts to solve separately, and then bring the result back together to increase bug hunting effectiveness and efficiency.
· “Regression”: easily manage multiple runs of parallel assertions, cases, or other runs in a centralized manner, making it easy to reuse regression and share regressions within your team.
While each flow is available today, this article is going to focus on the “Performance” use case. Again, the goal of the this flow is to parallelize evaluation of all your assertions over multiple CPUs via the new “Assertion Distributor” capability in IFV. Hence, given Assertion A, B, and C: Assertion A is now run on one CPU, Assertion B evaluated using another CPU, and Assertion C runs on a third CPU, all at the same time. The results are fed into a database and displayed in a single GUI, where the run time is now reduced to the time it takes to process your longest assertion (and not the sum of the run times to process each assertion). Here is how it works in practice:
Specifically, the Assertion Distributor is activated via a new button on the IFV GUI, which leverages the Desktop Manager component of IFV under-the-hood to manage and execute parallel assertion runs and analyze results. And in turn, Desktop Manager uses your compute farm infrastructure tool – whether it’s LSF, SunGrid, LoadLeveler, or home grown – to physically execute all the compute jobs. Step-by-step:
- Make sure that both IFV and something called “EMGR” are in your execution path. Typically this will have already been done for you by your CAD support person; but to double-check for yourself, look for the strings “EMGR92/bin” and “IFV92/tools/bin” in your path.
- Also ensure that all file references (on the command line and embedded .f files) reference full paths. If not the case, leverage environment variables as in the sample .f file below:
- Finally, IFV run must have a “prove” command in the supplied Tcl file.
- Invoke your IFV run and add +coverage and +gui to the command line. This invokes IFV with the GUI to show the Assertion Distributor button.
- Hit the “Pause” button on the GUI to stop the current proof.
- Click on the Assertion Distributor button or invoke the Assertion Distributor GUI via the menu selection: [Windows]->[Tools]->[Assertion Distributor]
- Select the Distribution Setup tab.
- Select the desired distribution mechanism (LSF, SunGrid, LoadLeveler, or User Defined)
- Contact your compute farm administrator and ask for the command line options you need to pass into the distribution scheme selected. Simply copy and paste the settings into all the fields as shown in the screenshot above.
- Hit the run button at the top of the window and observe that an xterm pops up showing the invocation of Desktop Manager.
- Wait until all the jobs are complete (You may have to hit the Refresh button a few times or set the refresh interval to your liking)
- Click on completed Session Total runs column to launch the “Runs” view and select View->Formal_properties from this window to see the assertion results.
Note: While in this example 74 different jobs were created and run, the results are rolled up and displayed to look like they were all executed in a single run.
Also note that there is an easy way to add these runs into a regression environment: simply save / reuse the Desktop Manager .vsif file for later runs invoked with the supplied if_vm launch script exactly as outlined above.
To learn more, customers with accounts at http://support.cadence.com can view the “See-it-Live” video for the Assertion Distributor.
Additionally, this process is documented in Chapter 14 of the Incisive Formal Verifier User Guide.
On Twitter: http://twitter.com/teamverify, @teamverify