Use MPL clusters as regions to evaluate the quality of std cell clusters' placement
Description
This is a research project to help elucidate if the mpl view of the flow is actually reasonable.
Suggested Solution
No response
Additional Context
No response
It seems we need some coverage on DPL too. I got this with sky130hd/microwatt during 3-5 (DPL):
/workspace/4ORFS/flow/scripts/flow.sh 3_5_place_dp detail_place
Running detail_place.tcl, stage 3_5_place_dp
read_liberty ./platforms/sky130hd/lib/sky130_fd_sc_hd__tt_025C_1v80.lib
read_liberty /workspace/4ORFS/flow/designs/sky130hd/microwatt/lib/Microwatt_FP_DFFRFile.lib
read_liberty /workspace/4ORFS/flow/designs/sky130hd/microwatt/lib/RAM32_1RW1R.lib
read_liberty /workspace/4ORFS/flow/designs/sky130hd/microwatt/lib/RAM512.lib
read_liberty /workspace/4ORFS/flow/designs/sky130hd/microwatt/lib/multiply_add_64x64.lib
read_db ./results/sky130hd/microwatt/base/3_4_place_resized.odb
Signal 11 received
Stack trace:
0# 0x00005ED795B2BA93 in /workspace/4ORFS/tools/install/OpenROAD/bin/openroad
1# 0x00007C750FC45330 in /lib/x86_64-linux-gnu/libc.so.6
2# odb::dbInst::getLocation(int&, int&) const in /workspace/4ORFS/tools/install/OpenROAD/bin/openroad
3# dpl::Opendp::legalPt(dpl::Node const*, bool) const in /workspace/4ORFS/tools/install/OpenROAD/bin/openroad
4# dpl::Opendp::shiftMove(dpl::Node*) in /workspace/4ORFS/tools/install/OpenROAD/bin/openroad
5# dpl::Opendp::place() in /workspace/4ORFS/tools/install/OpenROAD/bin/openroad
6# dpl::Opendp::detailedPlacement() in /workspace/4ORFS/tools/install/OpenROAD/bin/openroad
7# dpl::Opendp::detailedPlacement(int, int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) in /workspace/4ORFS/tools/install/OpenROAD/bin/openroad
8# dpl::detailed_placement_cmd(int, int, char const*) in /workspace/4ORFS/tools/install/OpenROAD/bin/openroad
9# 0x00005ED795BE6CC6 in /workspace/4ORFS/tools/install/OpenROAD/bin/openroad
10# TclNRRunCallbacks in /lib/x86_64-linux-gnu/libtcl8.6.so
11# 0x00007C7514DDC6BC in /lib/x86_64-linux-gnu/libtcl8.6.so
12# Tcl_EvalEx in /lib/x86_64-linux-gnu/libtcl8.6.so
13# Tcl_Eval in /lib/x86_64-linux-gnu/libtcl8.6.so
14# sta::sourceTclFile(char const*, bool, bool, Tcl_Interp*) in /workspace/4ORFS/tools/install/OpenROAD/bin/openroad
15# 0x00005ED795B2B0EB in /workspace/4ORFS/tools/install/OpenROAD/bin/openroad
16# Tcl_MainEx in /lib/x86_64-linux-gnu/libtcl8.6.so
17# main in /workspace/4ORFS/tools/install/OpenROAD/bin/openroad
18# 0x00007C750FC2A1CA in /lib/x86_64-linux-gnu/libc.so.6
19# __libc_start_main in /lib/x86_64-linux-gnu/libc.so.6
20# _start in /workspace/4ORFS/tools/install/OpenROAD/bin/openroad
Command terminated by signal 11
Elapsed time: 1:09.86[h:]min:sec. CPU time: user 65.31 sys 0.58 (94%). Peak memory: 627028KB.
make[1]: *** [Makefile:459: do-3_5_place_dp] Error 1
Also with nangate45/tinyRocket stage 3-1 converged fine, although 3-3 doesn't. I was able to make 3-3 converge by forcing target density to 0.7, I believe this is due to overlap among regions, making it harder to converge to a lower density.
I used the regions and groups provided by MPL only for coloring. I made gpl ignore the regions and groups (not creating placerBase neither nesterovBase objects, neither perform the placement respecting regions), with that we get the default behavior of gpl, and we only use regions and groups in odb from mpl for coloring only.
I painted all gpl fillers in black (instead of the default magenta), I removed the painting from RD and TD modes (the modes still run normally), and instances are colored based on their group with matching colors for its region. Here is the branch.
Here are some images with the nesterov final state for both stages 3-1 and 3-3. These should be all designs with macros (grep -nr "MACRO_PLACE_HALO"), we can differentiate 3-1 from 3-3 with presence/absence of IO pins in the images.
bp_quad is interesting:
FYI @maliberty @joaomai
With so many clusters its hard to tell who goes with who. Still it seems pretty clear this are quite different. Could you try it on something smaller/easier to visualize?
Surely! Here should be all public designs with macros: https://drive.google.com/drive/u/0/folders/1gMa0e5R9eyZUYd8ooUPzUqxg6LJnOK4w
Please let me know if I am missing some designs.
Something I noticed is that we usually have empty spaces with no region. This is unexpected it seems.