Skip to content

Conversation

@amin1377
Copy link
Contributor

WIP

@github-actions github-actions bot added VPR VPR FPGA Placement & Routing Tool lang-cpp C/C++ code labels Nov 10, 2025
@amin1377
Copy link
Contributor Author

amin1377 commented Nov 10, 2025

Agilex-like-Koios_medium: Link
SIV-titan_other: Link
SIV-titan_quick_qor: Link
S10-titanium: Link
Flagship-VTR (relaxed chan width): Link
7-series - VTR: Link

@amin1377
Copy link
Contributor Author

@vaughnbetz: I’ve included the results for various architectures and benchmarks. For most circuits, the routing struggle is zero, likely because, unlike in the paper, the utilization isn’t as high and there are ample routing resources available. Therefore, for the benchmarks included, this metric might not be particularly informative.

However, I did test it on some architectures and circuits where the router struggled with congestion, and in those cases, the routing struggle metric was above 20% (as mentioned in the paper). I don’t have a strong preference about whether to include this metric or not; I just thought it might be interesting to have a metric that allows us to compare how difficult routing was across different architectures and circuits.

@amin1377 amin1377 changed the title [WIP] Adding routing struggle metric Adding routing struggle metric Nov 12, 2025
@amin1377 amin1377 requested a review from vaughnbetz November 12, 2025 14:55
Copy link
Contributor

@AlexandreSinger AlexandreSinger left a comment

Choose a reason for hiding this comment

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

Some minor comments.

// This is defined as an iteration that has more heap operations than the maximum of the previous three iterations.
int num_high_heap_ops_iters = 0;
if (per_iter_heap_ops_count.size() > 4) {
for (int i = 3; i < static_cast<int>(per_iter_heap_ops_count.size()); i++) {
Copy link
Contributor

Choose a reason for hiding this comment

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

Minor comment for readability: Instead of casting the size into an int, why not make "i" and "j" both size_t type?

// Calculates the number of iterations with high heap ops.
// This is defined as an iteration that has more heap operations than the maximum of the previous three iterations.
int num_high_heap_ops_iters = 0;
if (per_iter_heap_ops_count.size() > 4) {
Copy link
Contributor

Choose a reason for hiding this comment

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

Why is this if statement needed? Is there a problem when the size is equal to 4? The below for loop will not execute if the size is 3 or less anyways due to the upper-bound condition.

// This ratio is defined as the number of iterations with high heap ops
// (i.e., iterations having more heap operations than the maximum of the previous three iterations
// divided by the total number of iterations.
// For more details, see TODO: routing struggle paper is not published yet.
Copy link
Contributor

Choose a reason for hiding this comment

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

Has the paper not been published yet?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

lang-cpp C/C++ code VPR VPR FPGA Placement & Routing Tool

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants