Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

make: gui_ prerendering #2610

Open
wants to merge 5 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
64 changes: 63 additions & 1 deletion flow/scripts/open.tcl
Original file line number Diff line number Diff line change
Expand Up @@ -60,12 +60,74 @@ proc read_timing {input_file} {
if {[env_var_equals GUI_TIMING 1]} {
puts "GUI_TIMING=1 reading timing, takes a little while for large designs..."
read_timing $input_file

gui::save_display_controls

set height [[[ord::get_db_block] getBBox] getDY]
set height [ord::dbu_to_microns $height]
set resolution [expr $height / 1000]

# FIXME reenable when there is a way to disable the rendered clock tree
#
# foreach clock [get_clocks *] {
# if { [llength [get_property $clock sources]] > 0 } {
# set clock_name [get_name $clock]
# save_clocktree_image -clock $clock_name \
# -width 100 -height 100 \
# $::env(OBJECTS_DIR)/dummy.png
# break
# }
# }
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

open should not write files as a side effect. This should be removed

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Agreed, but how else to precalculate this?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Does it actually save time? Most of the effort is to get sta warmed up. Drawing the tree should be cheap.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, last I checked.

However, I can delete the commented code and if this PR is otherwise good to go, we can square away what we already have a solution for and I can then create a new PR with a narrower concern and some numbers.

A way to precalculate this that does not modify GUI state and also does not write files to disk is needed, which isnt available yet, right?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, if there really is a need. I would be curious to see the time saved.


# FIXME IRDrop heatmap should be added, but it has to be skipped
# when there is no IRDrop heatmap to be rendered.

set block [ord::get_db_block]
set insts [$block getInsts]
set placed 1
foreach inst $insts {
set status [$inst getPlacementStatus]
# status is not in the list of PLACED, LOCKED
if {[lsearch {PLACED LOCKED} $status] == -1} {
set placed 0
break
}
}
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@maliberty How do I unselect the clock tree and return the GUI to the default view?

make gui_cts

image


set have_routes [expr {$placed && [grt::have_routes]}]
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do we still need to compute/check $placed? I thought this was fixed.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes: there is no ppl::have_placed method. I can simplify the code a bit here though for the have_routes case.


foreach heatmap {Placement Routing RUDY Power} {
if {[string equal $heatmap Routing] && !$have_routes} {
# Skipping $heatmap heatmap, no routes available
continue
}
if {[string equal $heatmap IRDrop] &&
(![env_var_exists_and_non_empty PWR_NETS_VOLTAGES] ||
![grt::have_routes])} {
# Skipping $heatmap heatmap, no PWR_NETS_VOLTAGES available
continue
oharboe marked this conversation as resolved.
Show resolved Hide resolved
}
if {[lsearch {RUDY Placement} $heatmap] != -1 && !$placed} {
# Skipping $heatmap heatmap, not all instances are placed
continue
}
puts "Prerendering $heatmap heatmap..."
gui::set_heatmap $heatmap rebuild 1
gui::dump_heatmap $heatmap $::env(REPORTS_DIR)/dummy.png
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can we avoid the file side effect?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yes: fixed

}

log_cmd gui::select_chart "Endpoint Slack"
log_cmd gui::update_timing_report

gui::clear_highlights -1
gui::clear_selections
gui::restore_display_controls
}

fast_route

if {[env_var_equals GUI_SHOW 1]} {
# Show the GUI when it is ready; it is unresponsive(with modal requesters
# saying it is unresponsive) until everything is loaded
gui::unminimize
log_cmd gui::unminimize
}
2 changes: 1 addition & 1 deletion tools/OpenROAD
Submodule OpenROAD updated 95 files
+1 −0 CMakeLists.txt
+2 −0 etc/DependencyInstaller.sh
+2 −4 src/Timing.cc
+11 −7 src/ant/test/CMakeLists.txt
+18 −10 src/cts/test/CMakeLists.txt
+20 −15 src/dbSta/test/CMakeLists.txt
+15 −8 src/dft/test/CMakeLists.txt
+7 −2 src/dpl/test/CMakeLists.txt
+9 −8 src/dpo/test/CMakeLists.txt
+4 −1 src/drt/src/dr/FlexDR.h
+16 −0 src/drt/src/dr/FlexDR_conn.h
+16 −12 src/drt/src/dr/FlexDR_init.cpp
+8 −0 src/drt/src/dr/FlexGridGraph.h
+65 −1 src/drt/src/dr/FlexGridGraph_maze.cpp
+6 −0 src/drt/src/dr/FlexWavefront.h
+0 −1 src/drt/src/global.cpp
+17 −24 src/drt/src/pa/FlexPA.h
+66 −72 src/drt/src/pa/FlexPA_prep.cpp
+7 −2 src/drt/test/CMakeLists.txt
+5 −1 src/fin/test/CMakeLists.txt
+36 −33 src/gpl/test/CMakeLists.txt
+274,699 −274,699 src/gpl/test/large01.defok
+77 −77 src/gpl/test/large01.ok
+312,529 −312,529 src/gpl/test/large02.defok
+78 −79 src/gpl/test/large02.ok
+0 −4 src/grt/src/GlobalRouter.cpp
+20 −4 src/grt/test/CMakeLists.txt
+0 −1 src/grt/test/repair_antennas_error1.ok
+2 −14 src/gui/CMakeLists.txt
+22 −0 src/gui/README.md
+2 −0 src/gui/include/gui/gui.h
+9 −18 src/gui/src/chartsWidget.cpp
+11 −23 src/gui/src/chartsWidget.h
+7 −0 src/gui/src/dbDescriptors.cpp
+1 −0 src/gui/src/dbDescriptors.h
+24 −0 src/gui/src/gui.cpp
+17 −0 src/gui/src/gui.i
+0 −8 src/gui/src/mainWindow.cpp
+4 −4 src/gui/src/mainWindow.h
+0 −2 src/gui/src/timingWidget.cpp
+0 −2 src/gui/src/timingWidget.h
+5 −1 src/gui/test/CMakeLists.txt
+10 −3 src/ifp/test/CMakeLists.txt
+7 −3 src/mpl/test/CMakeLists.txt
+6 −1 src/mpl2/test/CMakeLists.txt
+1 −0 src/odb/src/db/dbBlock.cpp
+2 −0 src/odb/src/db/dbBlock.h
+2 −1 src/odb/src/db/dbModule.cpp
+42 −29 src/odb/test/CMakeLists.txt
+0 −2 src/pad/CMakeLists.txt
+0 −6,599 src/pad/src/ICeWall.tcl
+0 −6,916 src/pad/src/PdnGen.tcl
+27 −22 src/pad/test/CMakeLists.txt
+6 −2 src/par/test/CMakeLists.txt
+0 −324 src/pdn/src/pdn.tcl
+77 −72 src/pdn/test/CMakeLists.txt
+0 −47 src/pdn/test/convert.ok
+0 −8 src/pdn/test/convert.tcl
+0 −17 src/pdn/test/nangate_convert/Nangate45.pdn
+0 −36 src/pdn/test/nangate_convert/Nangate45_grid_strategy-M1-M4-M7.cfg
+0 −1 src/pdn/test/regression_tests.tcl
+8 −8 src/ppl/include/ppl/IOPlacer.h
+13 −3 src/ppl/test/CMakeLists.txt
+20 −0 src/psm/README.md
+2 −0 src/psm/include/psm/pdnsim.h
+24 −0 src/psm/src/ir_solver.cpp
+11 −8 src/psm/src/ir_solver.h
+7 −0 src/psm/src/pdnsim.cpp
+7 −0 src/psm/src/pdnsim.i
+27 −0 src/psm/src/pdnsim.tcl
+26 −22 src/psm/test/CMakeLists.txt
+30 −0 src/psm/test/corners_assign_power.ok
+19 −0 src/psm/test/corners_assign_power.tcl
+19 −0 src/psm/test/gcd_test_assign_power.ok
+14 −0 src/psm/test/gcd_test_assign_power.tcl
+2 −0 src/psm/test/regression_tests.tcl
+10 −5 src/rcx/test/CMakeLists.txt
+11 −7 src/rmp/test/CMakeLists.txt
+8 −18 src/rsz/src/Resizer.cc
+38 −17 src/rsz/test/CMakeLists.txt
+4 −0 src/rsz/test/eliminate_dead_logic2.ok
+19 −0 src/rsz/test/eliminate_dead_logic2.tcl
+71 −0 src/rsz/test/eliminate_dead_logic2.vgok
+1 −0 src/rsz/test/regression_tests.tcl
+0 −1 src/stt/include/stt/SteinerTreeBuilder.h
+1 −2 src/stt/include/stt/flute.h
+0 −5 src/stt/src/SteinerTreeBuilder.cpp
+0 −44 src/stt/src/flt/flute.cpp
+7 −3 src/stt/test/CMakeLists.txt
+21 −15 src/tap/test/CMakeLists.txt
+7 −3 src/upf/test/CMakeLists.txt
+10 −5 src/utl/test/CMakeLists.txt
+15 −0 test/CMakeLists.txt
+1 −0 test/regression_tests.tcl
+1 −1 test/timing_api_4.py
Loading