Skip to content

[Place] Centriod Initial Placement #3018

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

Open
wants to merge 11 commits into
base: master
Choose a base branch
from
Open

[Place] Centriod Initial Placement #3018

wants to merge 11 commits into from

Conversation

amin1377
Copy link
Contributor

@amin1377 amin1377 commented May 1, 2025

WIP

@github-actions github-actions bot added VPR VPR FPGA Placement & Routing Tool libarchfpga Library for handling FPGA Architecture descriptions lang-cpp C/C++ code labels May 1, 2025
@amin1377
Copy link
Contributor Author

@vaughnbetz:

In this PR, I updated the initial placement logic as we discussed. Instead of choosing a random location within a fixed range of 15 around the centroid, the new approach gradually increases the search range from 1 up to half the device size. The function will now exhaust all available locations within the current range before expanding it.

Here are the results for Titan (including initial placement WL and CPD).

  • Initial placement WL and CPD improved significantly — reduced by 48% and 27%, respectively.
  • Final placement WL remained about the same, while placed CPD increased by 1%.
  • Routed WL was roughly a tie, and routed CPD increased by ~2%.

For the large VTR benchmarks (results):

  • Min channel width increased by 5%.
  • Routed WL and CPD increased by 1% and 5%, respectively.
  • However, initial placement WL and CPD still improved by 46% and 18%.

I was expecting the QoR to at least stay the same, if not improve overall. Do you think it would be worth digging into the circuits with the most degradation to better understand what's going on?

@tpagarani, FYI.

@vaughnbetz
Copy link
Contributor

I wonder if the final result quality drop off is due to making a very dense placement with a deep local minimum? You fill in around a seed block completely.
It's a bit more complicated, but you could choose a target porosity based on how full the design is and search in a ring only a certain percentage (matching the target porosity) of the locations around it. Or you could directly try to hit a certain porosity by rejecting locations that had an overly dense local region, compared to the overall average density that will be needed.

@vaughnbetz
Copy link
Contributor

@soheil also suggests checking if the initial temperature is appropriate, or if it should be lowered.

@vaughnbetz
Copy link
Contributor

Looking at the circuits with the most degradation makes sense to me too, to see if you can see what happened with them.

@amin1377 amin1377 changed the title [Place] Add a link between IO Blocks [Place] Centriod Initial Placement May 12, 2025
@amin1377
Copy link
Contributor Author

@soheil also suggests checking if the initial temperature is appropriate, or if it should be lowered.

I considered doing that, but since the initial temperature is determined by performing some moves and assigning a value based on the resulting cost changes, I'm not sure how effective it would be.

@vaughnbetz
Copy link
Contributor

vaughnbetz commented May 12, 2025 via email

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
lang-cpp C/C++ code libarchfpga Library for handling FPGA Architecture descriptions VPR VPR FPGA Placement & Routing Tool
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants