We provide the implementation of the method proposed in the paper. It is built upon the popular open-source infrastructure DREAMPlace.
- Optional HeteroSTA backend for faster timing analysis through the
timer_engineconfiguration. - Improved determinism in the pin-to-pin attraction flow, which addresses the nondeterministic behavior fixed in the merged updates.
- Ready-to-run benchmark JSONs for both the original OpenTimer-based flow and the HeteroSTA-based flow.
- Thanks to Zizheng Guo (
gzz@pku.edu.cn) and Shenglu Hua for providing these updates.
We highly recommend the use of Docker to enable a smooth environment configuration.
The following steps are borrowed from DREAMPlace repository. We make minor revisions to make it more clear.
-
Get the code and put it in folder
DATE25-TDP. -
Get the container:
-
Option 1: pull from the cloud limbo018/dreamplace.
docker pull limbo018/dreamplace:cuda -
Option 2: build the container.
docker build . --file Dockerfile --tag your_name/dreamplace:cuda
- Enter bash environment of the container. Replace
limbo018with your name if option 2 is chosen in the previous step.
-
Option 1: Run with GPU on Linux.
docker run --gpus 1 -it -v $(pwd):/DATE25-TDP limbo018/dreamplace:cuda bash -
Option 2: Run with CPU on Linux.
docker run -it -v $(pwd):/DATE25-TDP limbo018/dreamplace:cuda bash
-
cd /DATE25-TDP. -
Build.
mkdir build cd build cmake .. make make install -
Get benchmarks: download the cases here: https://drive.google.com/file/d/1HsAW_qcRje_-Ex1anWqAEQOKpGeCxpZa/view?usp=sharing. Unzip the package and put it in the following directory:
install/benchmarks/iccad2015.hs
Run our method on case superblue1 of ICCAD2015 timing-driven placement contest:
case=superblue1
python dreamplace/Placer.py test/iccad2015.pin2pin/$case.json
Or you can run all 8 cases by:
cd install
./run.sh
If you have already built and installed the project, you can skip the rebuild step in the helper script:
cd install
SKIP_BUILD=1 ./run.sh
The iccad2015 contest's official evaluation kit can be found at Google Drive link.
The default configuration for Critical Path Extraction uses 8 threads to accommodate various CPU cores and RAM capacities, impacting only the execution speed without affecting timing performance. For reproducing the speeds reported in the paper, adjust the thread count to 52 as specified in DATE25-TDP/thirdparty/OpenTimer/ot/timer/path.cpp at line 426.
You can get a 5.7x end-to-end speedup by switching the timer to HeteroSTA.
-
Obtain a free license by visiting the website HeteroSTA, then set it as an environment variable "HeteroSTA_Lic".
-
Modify the JSON file to enable HeteroSTA by changing the following parameters in
/DATE25-TDP/test/iccad2015.pin2pin/$case.json, or directly use the preconfigured files undertest/iccad2015.hs/.JSON parameter VALUE timer_engine heterosta sdc_input benchmarks/iccad2015.hs/$case/$case.hs.sdc -
Run our method integrated with HeteroSTA on case superblue1 of ICCAD2015 timing-driven placement contest:
case=superblue1 cd install python dreamplace/Placer.py test/iccad2015.hs/$case.json -
To keep the legacy behavior, configurations without an explicit
timer_enginecontinue to use OpenTimer by default.