58d2a016ce
* added ruff docs * style: Run ruff and black before yapf pass * yapf -r -i (23 fixes) * fixed conf.py and ran ruff format . * fixed conf.py 2 * formatted argparser.py * formatted src/rocprof_compute_analyze * formatted src/rocprof_compute_profile * formatted soc_base.py * formatted rocprof_compute_tui * formatted gui_components * formatted src/utils * formatted tests/ * format extra files * cleanup * fix test_utils.py * fixed typos * Update pyproject.toml * Update README.md * Update test_utils.py --------- Signed-off-by: jamessiddeley-amd <James.Siddeley@amd.com> Co-authored-by: James Siddeley <James.Siddeley@amd.com> Co-authored-by: systems-assistant[bot] <systems-assistant[bot]@users.noreply.github.com>
146 lines
5.8 KiB
Markdown
146 lines
5.8 KiB
Markdown
[](https://github.com/ROCm/rocprofiler-compute/actions/workflows/ubuntu-jammy.yml)
|
|
[](https://github.com/ROCm/rocprofiler-compute/actions/workflows/rhel-8.yml)
|
|
[](https://github.com/ROCm/rocprofiler-compute/actions/workflows/mi-rhel9.yml)
|
|
[](https://rocm.github.io/rocprofiler-compute/)
|
|
[](https://zenodo.org/badge/latestdoi/561919887)
|
|
|
|
# ROCm Compute Profiler
|
|
|
|
## General
|
|
|
|
ROCm Compute Profiler is a system performance profiling tool for machine
|
|
learning/HPC workloads running on AMD MI GPUs. The tool presently
|
|
targets usage on MI100, MI200, and MI300 accelerators.
|
|
|
|
* For more information on available features, installation steps, and
|
|
workload profiling and analysis, please refer to the online
|
|
[documentation](https://rocm.docs.amd.com/projects/rocprofiler-compute/en/latest/).
|
|
|
|
* ROCm Compute Profiler is an AMD open source research project and is not supported
|
|
as part of the ROCm software stack. We welcome contributions and
|
|
feedback from the community. Please see the
|
|
[CONTRIBUTING.md](CONTRIBUTING.md) file for additional details on our
|
|
contribution process.
|
|
|
|
* Licensing information can be found in the [LICENSE](LICENSE) file.
|
|
|
|
## Development
|
|
|
|
ROCm Compute Profiler follows a
|
|
[main-dev](https://nvie.com/posts/a-successful-git-branching-model/)
|
|
branching model. As a result, our latest stable release is shipped
|
|
from the `amd-mainline` branch, while new features are developed in our
|
|
`develop` branch.
|
|
|
|
Users may checkout `amd-staging` to preview upcoming features.
|
|
|
|
## Testing
|
|
|
|
Populate the empty variables in `Dockerfile.customrocmtest` based on latest CI build information.
|
|
|
|
To quickly get the environment (bash shell) for building and testing, run the following commands:
|
|
* `cd docker`
|
|
* `docker compose -f docker-compose.customrocmtest.yml up --force-recreate -d && docker attach docker-customrocmtest-1`
|
|
|
|
Inside the docker container, clean, build and install the project with tests enabled:
|
|
```
|
|
rm -rf build install && cmake -B build -D CMAKE_INSTALL_PREFIX=install -D ENABLE_TESTS=ON -D INSTALL_TESTS=ON -DENABLE_COVERAGE=ON -S . && cmake --build build --target install --parallel 8
|
|
```
|
|
|
|
Note that per the above command, build assets will be stored under `build` directory and installed assets will be stored under `install` directory.
|
|
|
|
Then, to run the automated test suite, run the following command:
|
|
```
|
|
ctest
|
|
```
|
|
|
|
For manual testing, you can find the executable at `install/bin/rocprof-compute`
|
|
|
|
NOTE: This Dockerfile uses `ubuntu 22.04` as the base operating system image
|
|
|
|
## Standalone binary
|
|
|
|
To create a standalone binary, run the following commands:
|
|
* `cd docker`
|
|
* `docker compose -f docker-compose.standalone.yml up --force-recreate -d && docker attach docker-standalone-1`
|
|
|
|
You should find the rocprof-compute.bin standalone binary inside the `build` folder in the root directory of the project.
|
|
|
|
To build the binary we follow these steps:
|
|
* Use RHEL 8 image used to build ROCm as the base image
|
|
* Install python3.8
|
|
* Install dependencies for runtime and for making standalone binary
|
|
* Call the make target which uses Nuitka to build the standalone binary
|
|
|
|
NOTE: Since RHEL 8 ships with glibc version 2.28, this standalone binary can only be run on environment with glibc version greater than 2.28.
|
|
glibc version can be checked using `ldd --version` command.
|
|
|
|
NOTE: libnss3.so shared library is required when using --roof-only option which generates roofline data in PDF format
|
|
|
|
To test the standalone binary provide the `--call-binary` option to pytest.
|
|
|
|
## How to Cite
|
|
|
|
This software can be cited using a Zenodo
|
|
[DOI](https://doi.org/10.5281/zenodo.7314631) reference. A BibTex
|
|
style reference is provided below for convenience:
|
|
|
|
```
|
|
@software{xiaomin_lu_2022_7314631
|
|
author = {Xiaomin Lu and
|
|
Cole Ramos and
|
|
Fei Zheng and
|
|
Karl W. Schulz and
|
|
Jose Santos and
|
|
Keith Lowery and
|
|
Nicholas Curtis and
|
|
Cristian Di Pietrantonio},
|
|
title = {ROCm/rocprofiler-compute: v3.1.0 (12 February 2025)},
|
|
month = February,
|
|
year = 2025,
|
|
publisher = {Zenodo},
|
|
version = {v3.1.0},
|
|
doi = {10.5281/zenodo.7314631},
|
|
url = {https://doi.org/10.5281/zenodo.7314631}
|
|
}
|
|
```
|
|
|
|
### Contribution Guidelines
|
|
|
|
To ensure code quality and consistency, we use **Ruff**, a fast Python linter and formatter. Before submitting a pull request, please ensure your code is formatted and linted correctly.
|
|
|
|
-----
|
|
|
|
### Installing and Running Ruff
|
|
|
|
Ruff is available on PyPI and can be installed using `pip`:
|
|
|
|
```bash
|
|
pip install ruff
|
|
```
|
|
|
|
Once installed, you can run Ruff from the command line. To check for linting errors and formatting issues, navigate to the project root and run:
|
|
|
|
```bash
|
|
ruff check .
|
|
ruff format --check .
|
|
```
|
|
|
|
To automatically fix most of the issues detected, you can use the `--fix` flag with the `check` command and run the `format` command without the `--check` flag:
|
|
|
|
```bash
|
|
ruff check --fix .
|
|
ruff format .
|
|
```
|
|
|
|
-----
|
|
|
|
### Disabling Formatting for Specific Sections
|
|
|
|
There may be instances where you need to disable Ruff's formatting on a specific block of code. You can do this using special comments:
|
|
|
|
* **`# fmt: off`** and **`# fmt: on`**: These comments can be used to disable and re-enable formatting for a block of code.
|
|
* **`# fmt: skip`**: This comment, placed at the end of a line, will prevent Ruff from formatting that specific statement.
|
|
|
|
You can also disable specific linting rules for a line by using `# noqa: <rule_code>`.
|