Dispatch fixed-size chunks (8 vertices per task) instead of one
contiguous slice per thread, so threads that finish early pick up more
work. Chunk size vs. runtime is U-shaped; 8 is the smallest size at the
bottom of the curve.
report_checks on a 32-core machine (min of 5 runs):
- gcd_sky130hd, 32 threads: 1845 us -> 1255 us (-32%)
- gcd_sky130hd, 8 threads: 1254 us -> 1117 us (-11%)
- aes_nangate45 (~17k inst): neutral; single-threaded path unchanged.
To keep upstream merges clean, the fork logic lives in a new
BfsIterator::visitLevelChunked() wrapped in "OpenROAD fork: BFS chunked
dispatch" markers, called from one marked line in visitParallel's
existing else branch. All other upstream lines are byte-identical. This
is a stop-gap until the upstream BFS rework lands; on merge conflict
take upstream and drop it.
Signed-off-by: Drew <[email protected]>
* Implement set_path_margin command
Adds a new set_path_margin SDC command that applies a signed slack
adjustment to the capture-clock side of timing paths. A positive
margin tightens the path (harder to meet) and a negative margin
loosens it. Supports -setup/-hold/-from/-through/-to scoping,
priority/override semantics matching other exceptions, text and
JSON report output, and write_sdc serialisation.
Adapted from Silimate PR #57; uses upstream/master Mode/Scene and
string_view APIs. Test uses unset_path_exceptions in place of the
Silimate-only reset_path alias.
Co-authored-by: Cursor <[email protected]>
* Fix nested delaySum call indentation to match project style.
Co-authored-by: Cursor <[email protected]>
* Address review: store PathMargin on PathEnd, split tests
Keep the path margin exception on PathEndClkConstrained, add
PathEnd::hasPathMargin for report gating, and split the monolithic
regression into set_path_margin1–6. Rebased onto upstream/master and
document the command in ChangeLog.
Co-authored-by: Cursor <[email protected]>
* Document set_path_margin in OpenSTA.fodt/pdf
Add the command reference, index entry, and note that
unset_path_exceptions also clears path margin exceptions.
Co-authored-by: Cursor <[email protected]>
* Drop [[nodiscard]] from PathEnd::hasPathMargin.
Co-authored-by: Cursor <[email protected]>
---------
Co-authored-by: Cursor <[email protected]>
* Implement set_max_dynamic_power and set_max_leakage_power.
Store max dynamic/leakage power like max area, expose getters through Sta,
write them in write_sdc, and document that they are ignored during timing.
Co-authored-by: Cursor <[email protected]>
* Drop get_max_* Tcl wrappers; use SWIG accessors in tests.
James pointed out the get_max_* commands duplicate existing SWIG
accessors; remove them and call sta::max_* from the regression.
Co-authored-by: Cursor <[email protected]>
---------
Co-authored-by: Cursor <[email protected]>
* support for filter in get_scene/mode
Signed-off-by: dsengupta0628 <[email protected]>
* extend user defined property to all 10 objects
Signed-off-by: dsengupta0628 <[email protected]>
* address reviews
Signed-off-by: dsengupta0628 <[email protected]>
---------
Signed-off-by: dsengupta0628 <[email protected]>
* support for filter in get_scene/mode
Signed-off-by: dsengupta0628 <[email protected]>
* defineProperty overload
Signed-off-by: dsengupta0628 <[email protected]>
* define and set user property
Signed-off-by: dsengupta0628 <[email protected]>
* address review comments to generalize- current support for mode and scene
Signed-off-by: dsengupta0628 <[email protected]>
* address second round comments- removed user from cmd names
Signed-off-by: dsengupta0628 <[email protected]>
* remove defaults, check property vals against type defined
Signed-off-by: dsengupta0628 <[email protected]>
* address reviews, indent
Signed-off-by: dsengupta0628 <[email protected]>
* indent fix
Signed-off-by: dsengupta0628 <[email protected]>
---------
Signed-off-by: dsengupta0628 <[email protected]>
* Use DynamicLatch in DispatchQueue to avoid main thread spinning
Replace the busy-yielding pending_task_count_ loop in DispatchQueue::finishTasks
with a blocking DynamicLatch. This avoids having the main thread consume CPU
cycles while waiting for dispatched tasks to complete.
The DynamicLatch implementation uses C++20 std::atomic::wait/notify_all for
efficient blocking and wakeup, with proper release-acquire semantics to ensure
task results are visible to the waiting thread.
* Reformat DynamicLatch to match DispatchQueue style
* Update attribution headers in DispatchQueue files to note modifications