ASU-VDA-Lab / 2024_ICCAD_Contest_Gate_Sizing_Benchmark

11 stars 4 forks source link

ICCAD_Contest_Gate_Sizing_Benchmark

This GitHub repository has the public benchmarks for the 2024 ICCAD CAD Contest Problem C for logic gate sizing, and the hidden benchmarks will be released after the contest. This contest primary goal is to explore the state-of-the-art algorithms for gate sizing to drive academic research to generate scalable gate-sizing algorithms. The secondary goal is to allow the use of a recently developed ML EDA research infrastructure which leverages OpenROAD's Python API and Nvidia's CircuitOps data representation format for ML-EDA or GPU-accelerated EDA research. OpenROAD's Python APIs allow users to execute EDA tools with just a few lines of Python code and to access the EDA tool database directly through Python APIs, bypassing traditional file I/O. CircuitOps provides an ML-friendly data infrastructure that uses Labeled Property Graphs (LPGs) backed by Intermediate Representation (IR) Tables to create datasets for ML-EDA applications. The Python-compatible LPG minimizes the developmental effort required for ML-EDA research.

Table of Content

Materials for using OpenROAD's Python API and Nvidia's CircuitOps

Build OpenROAD and CircuitOps

Option 1: Build using Docker

The following technique assumes you have docker installed on your machine. You can install docker from here. Build the docker image and run using the following commands:

docker build -t <image_name> .
docker run -it --name <container_name> <image_name>

Option 2: Build locally

The following technique assumes you have a machine with the required Ubuntu OS prerequisite of OpenROAD and CircuitOps.

Install dependencies for OpenROAD:

sudo ./OpenROAD/etc/DependencyInstaller.sh

Install dependencies for CircuitOps and ML EDA applications:

sudo apt-get install -y python3-matplotlib
sudo apt-get install -y nvidia-cuda-toolkit
sudo apt-get update
sudo apt-get install -y python3-graph-tool
sudo apt-get update && apt-get install -y gnupg2 ca-certificates
sudo apt-get install -y python3-pip
pip3 install torch==2.2.0
pip3 install numpy==1.24.4
pip3 install dgl==2.1.0
pip3 install pycairo
pip3 install pandas
pip3 install scikit-learn

Once packages have been installed, build OpenROAD:

cd ./OpenROAD/
mkdir build
cd build
cmake ..
make -j

Benchmark Statistics

Design Gate Count WNS (ns) TNS (ns) Total Slew Violation Difference (ns) Total Load Capacitance Violation Difference (fF) Total Leakage (uW)
NV_NVDLA_partition_m 27,553 -0.595 -156.323 258.761 256 1.672
NV_NVDLA_partition_p 79,919 -1.519 -6,306.64 6,125.512 5,292 5.539
ariane136 145,776 -1.298 -10,143.711 14,843.895 15,463 17,539.095
mempool_tile_wrap 187,851 -1.56 -12,697.547 12,053.291 10,779 2,590.158

(Reported by OpenSTA)

Reference Sizing Result Statistics

Design Gate Count WNS (ns) TNS (ns) Total Slew Violation Difference (ns) Total Load Capacitance Violation Difference (fF) Total Leakage (uW) Runtime (s)
NV_NVDLA_partition_m 27,553 -0.207 -10.266 NA NA 2.693 11
NV_NVDLA_partition_p 79,919 -0.126 -17.899 0.074 NA 6.635 254
ariane136 145,776 -0.214 -27.613 23.713 NA 17,545.15 573
mempool_tile_wrap 187,851 -0.199 -1.232 42.162 44 2,594.44 489

(Reported by OpenSTA)

Output file format

<instance name> <library cell name>
<instance name> <library cell name>
<instance name> <library cell name>
...

Intermediate file format

<pinName or portName>,<maxcap>,<maxtran>,<pin_tran>,<pin_slack>,<pin_rise_arr>,<pin_fall_arr>,<input_pin_cap>,<output_pin_cap>

<instanceName>,<staticPower>

("output_pin_cap" is the sum of the sink pins' capacitance and the net capacitance.)