Skip to content

Commit d000874

Browse files
committed
Merge branch 'master' of https://github.com/verilog-to-routing/vtr-verilog-to-routing into placement_move_primitive
2 parents fd9fce8 + 121a16c commit d000874

File tree

3 files changed

+75
-26
lines changed

3 files changed

+75
-26
lines changed

BUILDING.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ If you download a different version of those tools, then those versions may not
4646

4747
To verfiy that VTR has been installed correctly run::
4848

49-
./vtr_flow/scripts/run_vtr_task.py regression_tests/vtr_reg_basic/basic_timing
49+
./vtr_flow/scripts/run_vtr_task.py ./vtr_flow/tasks/regression_tests/vtr_reg_basic/basic_timing
5050

5151
The expected output is::
5252

README.developers.md

Lines changed: 73 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1272,47 +1272,96 @@ make CMAKE_PARAMS="-DVTR_IPO_BUILD=off" -j8 vpr
12721272

12731273
# Profiling VTR
12741274

1275-
1. Install `gprof`, `gprof2dot`, and `xdot`. Specifically, the previous two packages require python3, and you should install the last one with `sudo apt install` for all the dependencies you will need for visualizing your profile results.
1275+
## Use GNU Profiler gprof
1276+
1277+
1. **Installation**: Install `gprof`, `gprof2dot`, and `xdot` (optional).
1278+
1. `gprof` is part of [GNU Binutils](https://www.gnu.org/software/binutils/), which is a commonly-installed package alongside the standard GCC package on most systems. `gprof` should already exist. If not, use `sudo apt install binutils`.
1279+
2. `gprof2dot` requires python3 or conda. You can install with `pip3 install gprof2dot` or `conda install -c conda-forge gprof2dot`.
1280+
3. `xdot` is optional. To install it, use `sudo apt install`.
12761281
```
1277-
pip3 install gprof
1282+
sudo apt install binutils
12781283
pip3 install gprof2dot
1279-
sudo apt install xdot
1284+
sudo apt install xdot # optional
12801285
```
12811286

12821287
Contact your administrator if you do not have the `sudo` rights.
12831288

1284-
2. Use the CMake option below to enable VPR profiler build.
1289+
2. **VPR build**: Use the CMake option below to enable VPR profiler build.
12851290
```
12861291
make CMAKE_PARAMS="-DVTR_ENABLE_PROFILING=ON" vpr
12871292
```
12881293

1289-
3. With the profiler build, each time you run the VTR flow script, it will produce an extra file `gmon.out` that contains the raw profile information.
1290-
Run `gprof` to parse this file. You will need to specify the path to the VPR executable.
1294+
3. **Profiling**:
1295+
1. With the profiler build, each time you run the VTR flow script, it will produce an extra file `gmon.out` that contains the raw profile information. Run `gprof` to parse this file. You will need to specify the path to the VPR executable.
1296+
```
1297+
gprof $VTR_ROOT/vpr/vpr gmon.out > gprof.txt
1298+
```
1299+
1300+
2. Next, use `gprof2dot` to transform the parsed results to a `.dot` file (Graphviz graph description), which describes the graph of your final profile results. If you encounter long function names, specify the `-s` option for a cleaner graph. For other useful options, please refer to its [online documentation](https://github.com/jrfonseca/gprof2dot?tab=readme-ov-file#documentation).
1301+
```
1302+
gprof2dot -s gprof.txt > vpr.dot
1303+
```
1304+
1305+
- Note: You can chain the above commands to directly produce the `.dot` file:
1306+
```
1307+
gprof $VTR_ROOT/vpr/vpr gmon.out | gprof2dot -s > vpr.dot
1308+
```
1309+
1310+
4. **Visualization**:
1311+
- **Option 1** (Recommended): Use the [Edotor](https://edotor.net/) online Graphviz visualizer.
1312+
1. Open a browser and go to [https://edotor.net/](https://edotor.net/) (on any device, not necessarily the one where VPR is running).
1313+
2. Choose `dot` as the "Engine" at the top navigation bar.
1314+
3. Next, copy and paste `vpr.dot` into the editor space on the left side of the web view.
1315+
4. Then, you can interactively (i.e., pan and zoom) view the results and download an SVG or PNG image.
1316+
- **Option 2**: Use the locally-installed `xdot` visualization tool.
1317+
1. Use `xdot` to view your results:
1318+
```
1319+
xdot vpr.dot
1320+
```
1321+
2. To save your results as a PNG file:
1322+
```
1323+
dot -Tpng -Gdpi=300 vpr.dot > vpr.png
1324+
```
1325+
Note that you can use the `-Gdpi` option to make your picture clearer if you find the default dpi settings not clear enough.
1326+
1327+
## Use Linux Perf Tool
1328+
1329+
1. **Installation**: Install `perf` and `gprof2dot` (optional).
12911330
```
1292-
gprof $VTR_ROOT/vpr/vpr gmon.out > gprof.txt
1331+
sudo apt install linux-tools-common linux-tools-generic
1332+
pip3 install gprof2dot # optional
12931333
```
12941334

1295-
4. Next, use `gprof2dot` to transform the parsed results to a `.dot` file, which describes the graph of your final profile results. If you encounter long function names, specify the `-s` option for a cleaner graph.
1335+
2. **VPR build**: *No need* to enable any CMake options for using `perf`, unless you want to utilize specific features, such as `perf annotate`.
12961336
```
1297-
gprof2dot -s gprof.txt > vpr.dot
1337+
make vpr
12981338
```
12991339

1300-
5. You can chain the above commands to directly produce the `.dot` file:
1301-
```
1302-
gprof $VTR_ROOT/vpr/vpr gmon.out | gprof2dot -s > vpr.dot
1303-
```
1340+
3. **Profiling**: `perf` needs to know the process ID (i.e., pid) of the running VPR you want to monitor and profile, which can be obtained using the Linux command `top -u <username>`.
1341+
- **Option 1**: Real-time analysis
1342+
```
1343+
sudo perf top -p <vpr pid>
1344+
```
1345+
- **Option 2** (Recommended): Record and offline analysis
1346+
1347+
Use `perf record` to record the profile data and the call graph. (Note: The argument `lbr` for `--call-graph` only works on Intel platforms. If you encounter issues with call graph recording, please refer to the [`perf record` manual](https://perf.wiki.kernel.org/index.php/Latest_Manual_Page_of_perf-record.1) for more information.)
1348+
```
1349+
sudo perf record --call-graph lbr -p <vpr pid>
1350+
```
1351+
After VPR completes its run, or if you stop `perf` with CTRL+C (if you are focusing on a specific portion of the VPR execution), the `perf` tool will produce an extra file `perf.data` containing the raw profile results in the directory where you ran `perf`. You can further analyze the results by parsing this file using `perf report`.
1352+
```
1353+
sudo perf report -i perf.data
1354+
```
1355+
- Note 1: The official `perf` [wiki](https://perf.wiki.kernel.org/index.php/Main_Page) and [tutorial](https://perf.wiki.kernel.org/index.php/Tutorial) are highly recommended for those who want to explore more uses of the tool.
1356+
- Note 2: It is highly recommended to run `perf` with `sudo`, but you can find a workaround [here](https://superuser.com/questions/980632/run-perf-without-root-rights) to allow running `perf` without root rights.
1357+
- Note 3: You may also find [Hotspot](https://github.com/KDAB/hotspot) useful if you want to run `perf` with GUI support.
1358+
1359+
4. **Visualization** (optional): If you want a better illustration of the profiling results, first run the following command to transform the `perf` report into a Graphviz dot graph. The remaining steps are exactly the same as those described under [Use GNU Profiler gprof
1360+
](#use-gnu-profiler-gprof).
1361+
```
1362+
perf script -i perf.data | c++filt | gprof2dot.py -f perf -s > vpr.dot
1363+
```
13041364

1305-
6. Use `xdot` to view your results:
1306-
```
1307-
xdot vpr.dot
1308-
```
1309-
1310-
7. To save your results as a `png` file:
1311-
```
1312-
dot -Tpng -Gdpi=300 vpr.dot > vpr.png
1313-
```
1314-
1315-
Note that you can use the `-Gdpi` option to make your picture clearer if you find the default dpi settings not clear enough.
13161365

13171366
# External Subtrees
13181367
VTR includes some code which is developed in external repositories, and is integrated into the VTR source tree using [git subtrees](https://www.atlassian.com/blog/git/alternatives-to-git-submodule-git-subtree).

vtr_flow/arch/ispd/ultrascale_ispd.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -652,7 +652,7 @@
652652
<mux name="FMUX" input="LUT6_2[5].O6 LUT6_2[5].O5 CARRY8.O[5] CARRY8.CO[5]" output="CLB.MUX[5]"/>
653653
<mux name="GMUX" input="LUT6_2[6].O6 LUT6_2[6].O5 CARRY8.O[6] CARRY8.CO[6]" output="CLB.MUX[6]"/>
654654
<mux name="HMUX" input="LUT6_2[7].O6 LUT6_2[7].O5 CARRY8.O[7] CARRY8.CO[7]" output="CLB.MUX[7]"/>
655-
<direct name="Q1" input="{FF[0].Q FF[2].Q FF[4].Q FF[6].Q FF[8].Q FF[10].Q FF[12].Q FF[13].Q}" output="CLB.Q1"/>
655+
<direct name="Q1" input="{FF[0].Q FF[2].Q FF[4].Q FF[6].Q FF[8].Q FF[10].Q FF[12].Q FF[14].Q}" output="CLB.Q1"/>
656656
<direct name="Q2" input="{FF[1].Q FF[3].Q FF[5].Q FF[7].Q FF[9].Q FF[11].Q FF[13].Q FF[15].Q}" output="CLB.Q2"/>
657657
</interconnect>
658658
<!-- TODO: use better pin locations (think Xilinx uses 2-sided routing architecture) -->

0 commit comments

Comments
 (0)