While working on a buffering algorithm inside OpenROAD I've found I could improve the incremental STA runtime by a large factor (5x or similar) if I had more control over levelization. Namely I would need the following method:
sta_->dropVertexLevel(Vertex *vertex): invalidate the vertex level and set it to zero
This way I can arrange for incremental re-levelizalization to give some vertices of interest a lower level than they would otherwise obtain (since their level can only increase from the initial level) and my calls to sta_->findDelays(max_level); and search_->findArrivals(max_level); would be more specific.
A secondary request of lower priority is to have access to levelize_->setLevelSpace() and levelize_->invalid() since I believe those are private methods at the moment. Could the levelize_ object become part of the public interface?
I'm happy to make the changes if an approach was agreed upon.
While working on a buffering algorithm inside OpenROAD I've found I could improve the incremental STA runtime by a large factor (5x or similar) if I had more control over levelization. Namely I would need the following method:
sta_->dropVertexLevel(Vertex *vertex): invalidate the vertex level and set it to zeroThis way I can arrange for incremental re-levelizalization to give some vertices of interest a lower level than they would otherwise obtain (since their level can only increase from the initial level) and my calls to
sta_->findDelays(max_level);andsearch_->findArrivals(max_level);would be more specific.A secondary request of lower priority is to have access to
levelize_->setLevelSpace()andlevelize_->invalid()since I believe those are private methods at the moment. Could thelevelize_object become part of the public interface?I'm happy to make the changes if an approach was agreed upon.