Skip to content

Commit 5d0486f

Browse files
authored
Merge pull request #2605 from ueqri/feature-doc-update-profiling-vpr
[Docs] Updated Profiling VTR Section in Developer Guide
2 parents f2d38a9 + 4c516ab commit 5d0486f

File tree

1 file changed

+73
-24
lines changed

1 file changed

+73
-24
lines changed

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).

0 commit comments

Comments
 (0)