The-OpenROAD-Project / OpenSTA

OpenSTA engine
GNU General Public License v3.0
404 stars 172 forks source link

Parallel `findClkSkew` #220

Closed kbieganski closed 5 months ago

kbieganski commented 8 months ago

Runs findClkSkew in parallel.

findClkSkew basically retrieves the absolute maximum skew per clock. We can do it in separate threads and then reduce over the partial results from each thread.

Benchmarks

Ibex BlackParrot

kbieganski commented 6 months ago

The benchmark results from the description are outdated, currently the gains are not quite as good (about 2x faster on Ibex GRT instead of 3.5x faster).

Previously, I was accidentally running multiple BFSs in parallel in findFanout. That was not thread safe due to OpenSTA's BFS storing a flag about whether a vertex is queued in the vertex itself. That resulted in inconsistent worst clock skew values.

Currently working on parallelizing the findFanout part. Not yet sure if it's doable.

kbieganski commented 5 months ago

Parallelized the fanout part. Updated the description with new benchmarks.

tspyrou commented 5 months ago

@QuantamHD for a very fast view of clock skew which does not check to see that the maximum skew path is between two connected registers you can : report_checks -unconstrained -from [get_ports clock] -to [all_registers -clock_pins] -path_delay max report_checks -unconstrained -from [get_ports clock] -to [all_registers -clock_pins] -path_delay min and subtract. This can be done with find_timing_path and the math can be automated.

kbieganski commented 5 months ago

Moved this to https://github.com/parallaxsw/OpenSTA/pull/22