Skip to content

add minimal macro placement progress output #9240

@oharboe

Description

@oharboe

Description

There's zero progress output from macro placement today, but this is something that can run for a long time. 15 minutes easily, 2 hours and counting for a futile case I have locally with no insight into what I need to do differently.

I find it surprising that so much time is spent in [kernel], I would have expected all time to have been spent in user code... Weird...

Deeply recursive dataFlowDFSMacroPin function? Perhaps rewrite to iterative?

Samples: 253K of event 'cycles:P', 4000 Hz, Event count (approx.): 80937553531 lost: 0/0 drop: 0/0
Overhead  Shared Object                         Symbol
  35,80%  openroad                              [.] mpl::ClusteringEngine::dataFlowDFSMacroPin(int, int, mpl::Vertices
  29,01%  [kernel]                              [k] 0xffffffffaf82420b
   5,85%  [kernel]                              [k] 0xffffffffaf824a93
   4,11%  openroad                              [.] odb::compare_by_id(odb::dbObject const*, odb::dbObject const*)
   3,69%  openroad                              [.] std::pair<std::_Rb_tree_iterator<odb::dbInst*>, bool> std::_Rb_tre
   2,79%  openroad                              [.] odb::dbObject::getId() const
   1,15%  libc.so.6                             [.] malloc
   0,87%  libstdc++.so.6.0.30                   [.] std::_Rb_tree_insert_and_rebalance(bool, std::_Rb_tree_node_base*,
   0,84%  libjvm.so                             [.] XBarrier::mark_barrier_on_oop_slow_path(unsigned long)
   0,41%  libjvm.so                             [.] XMark::mark_and_follow(XMarkContext*, XMarkStackEntry)
   0,37%  openroad                              [.] std::_Rb_tree_node<odb::dbInst*>* std::_Rb_tree<odb::dbInst*, odb:
   0,34%  [kernel]                              [k] 0xffffffffaf8150e7
   0,24%  libjvm.so                             [.] void OopOopIterateDispatch<XMarkBarrierOopClosure<false> >::Table:
   0,21%  [kernel]                              [k] 0xffffffffaf8360a0
   0,17%  openroad                              [.] std::_Rb_tree<odb::dbInst*, odb::dbInst*, std::_Identity<odb::dbIn
   0,16%  libstdc++.so.6.0.30                   [.] operator new(unsigned long)
   0,13%  libjvm.so                             [.] XMark::follow_object(oopDesc*, bool)
   0,12%  libc.so.6                             [.] 0x00000000000a29a8
mpl::ClusteringEngine::dataFlowDFSMacroPin(int, int, mpl::VerticesMaps const&, mpl::DataFlowHypergraph const&, std::vector<std::set<odb::dbInst*, std::less<odb::dbInst*>, std::allocator<odb::dbInst*>>, std::allocator<std::set<odb::dbInst*, std::less<odb::dbInst*>, std::allocator<odb::dbInst*>>>>&, std::vector<std::set<odb::dbInst*, std::less<odb::dbInst*>, std::allocator<odb::dbInst*>>, std::allocator<std::set<odb::dbInst*, std::less<odb::dbInst*>, std::allocator<odb::dbInst*>>>>&, std::vector<bool, std::allocator<bool>>&, bool) (@mpl::ClusteringEngine::dataFlowDFSMacroPin(int, int, mpl::VerticesMaps const&, mpl::DataFlowHypergraph const&, std::vector<std::set<odb::dbInst*, std::less<odb::dbInst*>, std::allocator<odb::dbInst*>>, std::allocator<std::set<odb::dbInst*, std::less<odb::dbInst*>, std::allocator<odb::dbInst*>>>>&, std::vector<std::set<odb::dbInst*, std::less<odb::dbInst*>, std::allocator<odb::dbInst*>>, std::allocator<std::set<odb::dbInst*, std::less<odb::dbInst*>, std::allocator<odb::dbInst*>>>>&, std::vector<bool, std::allocator<bool>>&, bool):78)
[deleted 100s of levels]
mpl::ClusteringEngine::dataFlowDFSMacroPin(int, int, mpl::VerticesMaps const&, mpl::DataFlowHypergraph const&, std::vector<std::set<odb::dbInst*, std::less<odb::dbInst*>, std::allocator<odb::dbInst*>>, std::allocator<std::set<odb::dbInst*, std::less<odb::dbInst*>, std::allocator<odb::dbInst*>>>>&, std::vector<std::set<odb::dbInst*, std::less<odb::dbInst*>, std::allocator<odb::dbInst*>>, std::allocator<std::set<odb::dbInst*, std::less<odb::dbInst*>, std::allocator<odb::dbInst*>>>>&, std::vector<bool, std::allocator<bool>>&, bool) (@mpl::ClusteringEngine::dataFlowDFSMacroPin(int, int, mpl::VerticesMaps const&, mpl::DataFlowHypergraph const&, std::vector<std::set<odb::dbInst*, std::less<odb::dbInst*>, std::allocator<odb::dbInst*>>, std::allocator<std::set<odb::dbInst*, std::less<odb::dbInst*>, std::allocator<odb::dbInst*>>>>&, std::vector<std::set<odb::dbInst*, std::less<odb::dbInst*>, std::allocator<odb::dbInst*>>, std::allocator<std::set<odb::dbInst*, std::less<odb::dbInst*>, std::allocator<odb::dbInst*>>>>&, std::vector<bool, std::allocator<bool>>&, bool):126)
mpl::ClusteringEngine::createDataFlow() (@mpl::ClusteringEngine::createDataFlow():364)
mpl::ClusteringEngine::run() (@mpl::ClusteringEngine::run():38)
mpl::HierRTLMP::runMultilevelAutoclustering() (@mpl::HierRTLMP::runMultilevelAutoclustering():190)
mpl::HierRTLMP::run() (@mpl::HierRTLMP::run():12)
mpl::MacroPlacer::place(int, int, int, int, int, float, int, float, int, int, int, odb::Rect, float, float, float, float, float, float, float, float, float, float, float, char const*, bool) (@mpl::MacroPlacer::place(int, int, int, int, int, float, int, float, int, int, int, odb::Rect, float, float, float, float, float, float, float, float, float, float, float, char const*, bool):110)
_wrap_rtl_macro_placer_cmd (@_wrap_rtl_macro_placer_cmd:453)
TclNRRunCallbacks (@TclNRRunCallbacks:37)
___lldb_unnamed_symbol1504 (@___lldb_unnamed_symbol1504:315)
Tcl_EvalEx (@Tcl_EvalEx:9)
Tcl_Eval (@Tcl_Eval:11)

Suggested Solution

Some very limited progress output.

Additional Context

No response

Metadata

Metadata

Assignees

Labels

mplMacro Placement

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions