Skip to content

Commit 240ae79

Browse files
committed
Merge branch 'bounding_box_3d_height' of https://github.com/verilog-to-routing/vtr-verilog-to-routing into 3d_track_to_track_conn
2 parents 071b529 + 445e6d0 commit 240ae79

File tree

311 files changed

+18345
-5673
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

311 files changed

+18345
-5673
lines changed

.github/workflows/labeler.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
name: "Pull Request Labeler"
22
on:
3-
- pull_request
3+
- pull_request_target
44

55
jobs:
66
triage:

.github/workflows/test.yml

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -197,6 +197,11 @@ jobs:
197197
params: '-DVTR_ASSERT_LEVEL=3 -DWITH_BLIFEXPLORER=on -DVPR_USE_EZGL=off',
198198
suite: 'vtr_reg_basic'
199199
},
200+
{
201+
name: 'Basic with CAPNPROTO disabled',
202+
params: '-DVTR_ASSERT_LEVEL=3 -DWITH_BLIFEXPLORER=on -DVTR_ENABLE_CAPNPROTO=off',
203+
suite: 'vtr_reg_basic'
204+
},
200205
{
201206
name: 'Basic with VTR_ENABLE_DEBUG_LOGGING',
202207
params: '-DVTR_ASSERT_LEVEL=3 -DWITH_BLIFEXPLORER=on -DVTR_ENABLE_DEBUG_LOGGING=on',
@@ -297,7 +302,13 @@ jobs:
297302
CMAKE_PARAMS: ${{ matrix.params }}
298303
BUILD_TYPE: debug
299304
LSAN_OPTIONS: 'exitcode=42' #Use a non-standard exit code to ensure LSAN errors are detected
305+
# In Ubuntu 20240310.1.0, the entropy of ASLR has increased (28 -> 32). LLVM 14 in this
306+
# image is not compatible with this increased ASLR entropy. Apparently, memory sanitizer
307+
# depends on LLVM and all CI tests where VTR_ENABLE_SANITIZE is enabled fail. For a temporary
308+
# fix, we manually reduce the entropy. This quick fix should be removed in the future
309+
# when github deploys a more stable Ubuntu image.
300310
run: |
311+
sudo sysctl -w vm.mmap_rnd_bits=28
301312
export PATH="/usr/lib/ccache:/usr/local/opt/ccache/libexec:$PATH"
302313
./.github/scripts/build.sh
303314
# We skip QoR since we are only checking for errors in sanitizer runs
@@ -349,6 +360,7 @@ jobs:
349360
CMAKE_PARAMS: '-DVTR_ASSERT_LEVEL=3 -DVTR_ENABLE_SANITIZE=on -DVTR_IPO_BUILD=off -DWITH_BLIFEXPLORER=on -DWITH_PARMYS=OFF -DWITH_ODIN=on'
350361
BUILD_TYPE: debug
351362
run: |
363+
sudo sysctl -w vm.mmap_rnd_bits=28
352364
export PATH="/usr/lib/ccache:/usr/local/opt/ccache/libexec:$PATH"
353365
./.github/scripts/build.sh
354366
./run_reg_test.py odin_reg_basic -show_failures -j2

.gitignore

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,19 @@ vtr_flow/benchmarks/titan_blif/titan23
3838
vtr_flow/benchmarks/titan_blif/titan_new
3939

4040

41+
#
42+
# NoC MLP benchmarks
43+
#
44+
# We ignore blif and vqm files because of thier large size.
45+
# We also ignore symbolic links to traffic flow and blif files.
46+
#
47+
vtr_flow/benchmarks/noc/Large_Designs/MLP/**/*.vqm
48+
vtr_flow/benchmarks/noc/Large_Designs/MLP/**/*.blif
49+
vtr_flow/benchmarks/noc/Large_Designs/MLP/blif_files/*
50+
vtr_flow/benchmarks/noc/Large_Designs/MLP/traffic_flow_files/*
51+
MLP_Benchmark_Netlist_Files_blif.tar.gz
52+
MLP_Benchmark_Netlist_Files_vqm_blif.tar.gz
53+
4154
#
4255
# ISPD benchmarks
4356
#

CHANGELOG.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,13 @@ _The following are changes which have been implemented in the VTR master branch
117117
### Deprecated
118118
* VPR's breadth-first router (use the timing-driven router, which provides supperiour QoR and Run-time)
119119

120+
### Docker Image
121+
* A docker image is available for VTR 8.0 release on mohamedelgammal/vtr8:latest. You can run it using the following commands:
122+
```
123+
$ sudo docker pull mohamedelgammal/vtr8:latest
124+
$ sudo docker run -it mohamedelgammal/vtr8:latest
125+
```
126+
120127
## v8.0.0-rc2 - 2019-08-01
121128

122129
### Changed

CMakeLists.txt

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ set(VTR_IPO_BUILD "auto" CACHE STRING "Should VTR be compiled with interprocedur
2323
set_property(CACHE VTR_IPO_BUILD PROPERTY STRINGS auto on off)
2424

2525
#Allow the user to configure how much assertion checking should occur
26-
set(VTR_ASSERT_LEVEL "2" CACHE STRING "VTR assertion checking level. 0: no assertions, 1: fast assertions, 2: regular assertions, 3: additional assertions with noticable run-time overhead, 4: all assertions (including those with significant run-time cost)")
26+
set(VTR_ASSERT_LEVEL "2" CACHE STRING "VTR assertion checking level. 0: no assertions, 1: fast assertions, 2: regular assertions, 3: additional assertions with noticeable run-time overhead, 4: all assertions (including those with significant run-time cost)")
2727
set_property(CACHE VTR_ASSERT_LEVEL PROPERTY STRINGS 0 1 2 3 4)
2828

2929
option(VTR_ENABLE_STRICT_COMPILE "Specifies whether compiler warnings should be treated as errors (e.g. -Werror)" OFF)
@@ -341,6 +341,14 @@ add_custom_target(get_titan_benchmarks
341341
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
342342
COMMENT "Downloading (~1GB) and extracting Titan benchmarks (~10GB) into VTR source tree.")
343343

344+
#
345+
# NoC MLP Benchmarks
346+
#
347+
add_custom_target(get_noc_mlp_benchmarks
348+
COMMAND ./vtr_flow/scripts/download_noc_mlp.py --vtr_flow_dir ./vtr_flow
349+
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
350+
COMMENT "Downloading (~100MB) and extracting NoC MLP benchmarks (~3.2GB) into VTR source tree.")
351+
344352
#
345353
# ISPD Benchmarks
346354
#

README.developers.md

Lines changed: 52 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -386,17 +386,21 @@ The following are key QoR metrics which should be used to evaluate the impact of
386386

387387
Implementation Quality Metrics:
388388

389-
| Metric | Meaning | Sensitivity |
390-
|-----------------------------|--------------------------------------------------------------------------|-------------|
391-
| num_pre_packed_blocks | Number of primitive netlist blocks (after tech. mapping, before packing) | Low |
392-
| num_post_packed_blocks | Number of Clustered Blocks (after packing) | Medium |
393-
| device_grid_tiles | FPGA size in grid tiles | Low-Medium |
394-
| min_chan_width | The minimum routable channel width | Medium\* |
395-
| crit_path_routed_wirelength | The routed wirelength at the relaxed channel width | Medium |
396-
| critical_path_delay | The critical path delay at the relaxed channel width | Medium-High |
389+
| Metric | Meaning | Sensitivity |
390+
|---------------------------------|------------------------------------------------------------------------------|-------------|
391+
| num_pre_packed_blocks | Number of primitive netlist blocks (after tech. mapping, before packing) | Low |
392+
| num_post_packed_blocks | Number of Clustered Blocks (after packing) | Medium |
393+
| device_grid_tiles | FPGA size in grid tiles | Low-Medium |
394+
| min_chan_width | The minimum routable channel width | Medium\* |
395+
| crit_path_routed_wirelength | The routed wirelength at the relaxed channel width | Medium |
396+
| NoC_agg_bandwidth\** | The total link bandwidth utilized by all traffic flows | Low |
397+
| NoC_latency\** | The total time of traffic flow data transfer (summed over all traffic flows) | Low |
398+
| NoC_latency_constraints_cost\** | Total number of traffic flows that meet their latency constraints | Low |
397399

398400
\* By default, VPR attempts to find the minimum routable channel width; it then performs routing at a relaxed (e.g. 1.3x minimum) channel width. At minimum channel width routing congestion can distort the true timing/wirelength characteristics. Combined with the fact that most FPGA architectures are built with an abundance of routing, post-routing metrics are usually only evaluated at the relaxed channel width.
399401

402+
\** NoC-related metrics are only reported when --noc option is enabled.
403+
400404
Run-time/Memory Usage Metrics:
401405

402406
| Metric | Meaning | Sensitivity |
@@ -493,7 +497,7 @@ k6_frac_N10_frac_chain_mem32K_40nm.xml boundtop.v common 9f591f6-
493497
k6_frac_N10_frac_chain_mem32K_40nm.xml ch_intrinsics.v common 9f591f6-dirty success 363 493 270 247 10 10 17 99 130 1 0 1792 1.86527 -194.602 -1.86527 46 1562 13 1438 20 2.4542 -226.033 -2.4542 0 0 3.92691e+06 1.4642e+06 259806. 2598.06 333135. 3331.35 0.03 0.01 -1 -1 -1 0.46 0.31 0.94 0.09 2.59 62684 8672 32940
494498
```
495499

496-
### Example: Titan Benchmarks QoR Measurements
500+
### Example: Titan Benchmarks QoR Measurement
497501

498502
The [Titan benchmarks](https://docs.verilogtorouting.org/en/latest/vtr/benchmarks/#titan-benchmarks) are a group of large benchmark circuits from a wide range of applications, which are compatible with the VTR project.
499503
The are typically used as post-technology mapped netlists which have been pre-synthesized with Quartus.
@@ -511,7 +515,7 @@ $ make get_titan_benchmarks
511515
#Move to the task directory
512516
$ cd vtr_flow/tasks
513517

514-
#Run the VTR benchmarks
518+
#Run the Titan benchmarks
515519
$ ../scripts/run_vtr_task.py regression_tests/vtr_reg_nightly_test2/titan_quick_qor
516520

517521
#Several days later... they complete
@@ -528,6 +532,44 @@ stratixiv_arch.timing.xml stereo_vision_stratixiv_arch_timing.blif 0208312
528532
stratixiv_arch.timing.xml cholesky_mc_stratixiv_arch_timing.blif 0208312 success 140214 108592 67410 5444 121 90 -1 111 151 -1 -1 5221059 8.16972 -454610 -8.16972 1518597 15 0 0 2.38657e+08 21915.3 9.34704 -531231 -9.34704 0 0 211.12 364.32 490.24 6356252 -1 -1
529533
```
530534

535+
### Example: NoC Benchmarks QoR Measurements
536+
NoC benchmarks currently include synthetic and MLP benchmarks. Synthetic benchmarks have various NoC traffic patters,
537+
bandwidth utilization, and latency requirements. High-quality NoC router placement solutions for these benchmarks are
538+
known. By comparing the known solutions with NoC router placement results, the developer can evaluate the sanity of
539+
the NoC router placement algorithm. MLP benchmarks are the only realistic netlists included in this benchmark set.
540+
541+
Based on the number of NoC routers in a synthetic benchmark, it is run on one of two different architectures. All MLP
542+
benchmarks are run on an FPGA architecture with 16 NoC routers. Post-technology mapped netlists (blif files)
543+
for synthetic benchmarks are added to the VTR project. However, MLP blif files are very large and should be downloaded
544+
separately.
545+
546+
Since NoC benchmarks target different FPGA architectures, they are run as different circuits. A typical way to run all
547+
NoC benchmarks is to run a task list and gather QoR data form different tasks:
548+
549+
#### Running and Integrating the NoC Benchmarks with VTR
550+
```shell
551+
#From the VTR root
552+
553+
#Download and integrate NoC MLP benchmarks into the VTR source tree
554+
$ make get_noc_mlp_benchmarks
555+
556+
#Move to the task directory
557+
$ cd vtr_flow
558+
559+
#Run the VTR benchmarks
560+
$ scripts/run_vtr_task.py -l tasks/noc_qor/task_list.txt
561+
562+
#Several days later... they complete
563+
564+
#NoC benchmarks are run as several different tasks. Therefore, QoR results should be gathered from multiple directories,
565+
#one for each task.
566+
$ head -5 tasks/noc_qor/large_complex_synthetic/latest/parse_results.txt
567+
$ head -5 tasks/noc_qor/large_simple_synthetic/latest/parse_results.txt
568+
$ head -5 tasks/noc_qor/small_complex_synthetic/latest/parse_results.txt
569+
$ head -5 tasks/noc_qor/small_simple_synthetic/latest/parse_results.txt
570+
$ head -5 tasks/noc_qor/MLP/latest/parse_results.txt
571+
```
572+
531573
### Example: Koios Benchmarks QoR Measurement
532574

533575
The [Koios benchmarks](https://github.com/verilog-to-routing/vtr-verilog-to-routing/tree/master/vtr_flow/benchmarks/verilog/koios) are a group of Deep Learning benchmark circuits distributed with the VTR project.

doc/README

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ Overview
44
The VTR documentation is generated using sphinx, a python based documentation generator.
55

66
The documentation itself is written in re-structured text (files ending in .rst), which
7-
is a lightwieght mark-up language for text documents.
7+
is a lightweight mark-up language for text documents.
88

99
Currently VTR's documenation is automatically built by https://readthedocs.org/projects/vtr/ and is served at:
1010

@@ -36,7 +36,7 @@ from the main documentation directory (i.e. <vtr_root>/doc).
3636

3737
This will produce the output html in the _build directory.
3838

39-
You can then view the resulting documention with the web-browser of your choice.
39+
You can then view the resulting documentation with the web-browser of your choice.
4040
For instance:
4141

4242
$ firefox _build/html/index.html

doc/src/vpr/command_line_usage.rst

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -350,7 +350,7 @@ Use the options below to override this default naming behaviour.
350350

351351
.. option:: --read_rr_graph <file>
352352

353-
Reads in the routing resource graph named <file> loads it for use during the placement and routing stages. Expects a file extension of either ``.xml`` and ``.bin``.
353+
Reads in the routing resource graph named <file> loads it for use during the placement and routing stages. Expects a file extension of either ``.xml`` or ``.bin``.
354354

355355
The routing resource graph overthrows all the architecture definitions regarding switches, nodes, and edges. Other information such as grid information, block types, and segment information are matched with the architecture file to ensure accuracy.
356356

@@ -368,22 +368,22 @@ Use the options below to override this default naming behaviour.
368368

369369
.. option:: --read_router_lookahead <file>
370370

371-
Reads the lookahead data from the specified file instead of computing it.
371+
Reads the lookahead data from the specified file instead of computing it. Expects a file extension of either ``.capnp`` or ``.bin``.
372372

373373
.. option:: --write_router_lookahead <file>
374374

375-
Writes the lookahead data to the specified file.
375+
Writes the lookahead data to the specified file. Accepted file extensions are ``.capnp``, ``.bin``, and ``.csv``.
376376

377377
.. option:: --read_placement_delay_lookup <file>
378378

379-
Reads the placement delay lookup from the specified file instead of computing it.
379+
Reads the placement delay lookup from the specified file instead of computing it. Expects a file extension of either ``.capnp`` or ``.bin``.
380380

381381
.. option:: --write_placement_delay_lookup <file>
382382

383-
Writes the placement delay lookup to the specified file.
383+
Writes the placement delay lookup to the specified file. Expects a file extension of either ``.capnp`` or ``.bin``.
384384
.. option:: --write_initial_place_file <file>
385385

386-
Writes out the the placement chosen by the initial placement algorithm to the specified file
386+
Writes out the the placement chosen by the initial placement algorithm to the specified file.
387387

388388
.. option:: --outfile_prefix <string>
389389

doc/src/vtr/benchmarks.rst

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -191,7 +191,20 @@ The SymbiFlow benchmarks can be downloaded and extracted by running the followin
191191
cd $VTR_ROOT
192192
make get_symbiflow_benchmarks
193193
194-
Once downloaded and extracted, benchmarks are provided as post-synthesized eblif files under: ::
194+
Once downloaded and extracted, benchmarks are provided as post-synthesized blif files under: ::
195195

196196
$VTR_ROOT/vtr_flow/benchmarks/symbiflow
197197

198+
.. _noc_benchmarks:
199+
200+
NoC Benchmarks
201+
----------------
202+
NoC benchmarks are composed of synthetic and MLP benchmarks and target NoC-enhanced FPGA architectures. Synthetic
203+
benchmarks include a wide variety of traffic flow patters and are divided into two groups: 1) simple and 2) complex
204+
benchmarks. As their names imply, simple benchmarks use very simple and small logic modules connected to NoC routers,
205+
while complex benchmarks implement more complicated functionalities like encryption. These benchmarks do not come from
206+
real application domains. On the other hand, MLP benchmarks include modules that perform matrix-vector multiplication
207+
and move data. Pre-synthesized netlists for the synthetic benchmarks are added to VTR project, but MLP netlists should
208+
be downloaded separately.
209+
210+
.. note:: The NoC MLP benchmarks are not included with the VTR release (due to their size). However they can be downloaded and extracted by running ``make get_noc_mlp_benchmarks`` from the root of the VTR tree. They can also be `downloaded manually <https://www.eecg.utoronto.ca/~vaughn/titan/>`_.

doc/src/vtr/get_vtr.rst

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,16 @@ The official VTR release is available from:
3131

3232
https://verilogtorouting.org/download
3333

34+
VTR Docker Image
35+
~~~~~~~~~~~~~~~~
36+
A docker image for VTR is available. This image provides all the required packages and python libraries required. However, this ease to compile and run comes at the cost of some runtime increase (<10%). To pull and run the docker image of latest VTR repository, you can run the following commands:
37+
38+
.. code-block:: bash
39+
40+
> sudo docker pull mohamedelgammal/vtr-master:latest
41+
> sudo docker run -it mohamedelgammal/vtr-master:latest
42+
43+
3444
Release
3545
~~~~~~~
3646

libs/EXTERNAL/libargparse/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ libargparse
22
===========
33
This is (yet another) simple command-line parser for C++ applications, inspired by Python's agparse module.
44

5-
It requires only a C++11 compiler, and has no external dependancies.
5+
It requires only a C++11 compiler, and has no external dependencies.
66

77
One of the advantages of libargparse is that all conversions from command-line strings to program types (bool, int etc.) are performed when the command line is parsed (and not when the options are accessed).
88
This avoids command-line related errors from showing up deep in the program execution, which can be problematic for long-running programs.

libs/EXTERNAL/libargparse/argparse_test.cpp

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -399,10 +399,11 @@ int main(
399399
.show_in(argparse::ShowIn::HELP_ONLY);
400400
route_grp.add_argument(args.router_algorithm, "--router_algorithm")
401401
.help("Specifies the router algorithm to use.\n"
402-
" * parallel: timing_driven with tricks to run on multiple cores (may be worse)\n"
403-
" * timing driven: focuses on routability and circuit speed\n")
402+
" * timing driven: focuses on routability and circuit speed [default]\n"
403+
" * parallel: timing_driven with nets in different regions of the chip routed in parallel\n"
404+
" * parallel_decomp: timing_driven with additional parallelism obtained by decomposing high-fanout nets, possibly reducing quality\n")
404405
.default_value("timing_driven")
405-
.choices({"parallel", "timing_driven"})
406+
.choices({"parallel", "parallel_decomp", "timing_driven"})
406407
.show_in(argparse::ShowIn::HELP_ONLY);
407408
route_grp.add_argument(args.min_incremental_reroute_fanout, "--min_incremental_reroute_fanout")
408409
.help("The net fanout thershold above which nets will be re-routed incrementally.")

0 commit comments

Comments
 (0)