Files
TheRock/rocm-systems/projects/rocprofiler-systems/docs/install/build.rst
T
derek.holloway 7502bf64a4
CodeQL / Analyze (actions) (push) Canceled after 0s
CodeQL / Analyze (python) (push) Canceled after 0s
pre-commit / pre-commit (push) Canceled after 0s
Multi-Arch CI / setup (push) Canceled after 0s
Publish build_manylinux_x86_64 images / publish_build_manylinux_x86_64 (push) Canceled after 0s
Setup (Multi-Arch) / setup (push) Canceled after 0s
Multi-Arch CI / Linux::${{ fromJSON(needs.setup.outputs.linux_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubi10 image / publish_no_rocm_image_ubi10 (push) Canceled after 0s
Multi-Arch CI / Windows::${{ fromJSON(needs.setup.outputs.windows_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Multi-Arch CI / Manifest Diff (push) Canceled after 0s
TheRock Manifest Diff Report / Generate Manifest Diff Report (push) Canceled after 0s
Multi-Arch CI / CI Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_ocl_rt images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_rocgdb images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Unit Tests / Unit Tests :: ubuntu-24.04 (push) Canceled after 0s
Unit Tests / Unit Tests :: windows-2022 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_media (push) Canceled after 0s
Unit Tests / Unit Tests Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_openmpi (push) Canceled after 0s
Flatten subprojects into a single base monorepo
2026-09-02 16:34:47 -07:00

291 lines
13 KiB
ReStructuredText

.. meta::
:description: ROCm Systems Profiler installation documentation and reference
:keywords: rocprof-sys, rocprofiler-systems, Omnitrace, ROCm, installation, installer, profiler, tracking, visualization, tool, Instinct, accelerator, AMD
***************************************
Build ROCm Systems Profiler from source
***************************************
To build ROCm Systems Profiler as part of the ROCm Core SDK, see `TheRock build
instructions
<https://github.com/ROCm/TheRock/blob/main/README.md#build-configuration>`__.
TheRock is the recommended way to build ROCm components from source.
To build ROCm Systems Profiler standalone, without TheRock, use the
instructions on this page.
.. seealso::
If you encounter problems after installation, consult the
:ref:`post-installation-troubleshooting` section.
Operating system support
========================
ROCm Systems Profiler is only supported on Linux. For more information, see
:ref:`ROCm Core SDK components <rocm:release-components>`.
Identifying the operating system
--------------------------------
If you are unsure of the Linux distribution and version, the ``/etc/os-release`` and
``/usr/lib/os-release`` files contain this information.
.. code-block:: shell
$ cat /etc/os-release
NAME="Ubuntu"
VERSION_ID="24.04"
VERSION="24.04.3 LTS (Noble Numbat)"
VERSION_CODENAME=noble
ID=ubuntu
The relevant fields are ``ID`` and the ``VERSION_ID``.
Build ROCm Systems Profiler from source
=======================================
ROCm Systems Profiler needs a GCC compiler with full support for C++20 and CMake v3.25 or higher.
The Clang compiler may be used instead of the GCC compiler if `Dyninst <https://github.com/dyninst/dyninst>`_
is already installed.
Build requirements
------------------
* GCC compiler v10+
* Older GCC compilers may be supported but are not tested
* Clang compilers are generally supported for ROCm Systems Profiler but not Dyninst
* `CMake <https://cmake.org/>`_ v3.25 or later
.. note::
If the ``CMake`` installed on the system is too old, you can install a new
version using various methods. One of the easiest options is to use PyPi (Python's pip).
.. code-block:: shell
pip install --user 'cmake==3.25.0'
export PATH=${HOME}/.local/bin:${PATH}
Required third-party packages
-----------------------------
* `Dyninst <https://github.com/dyninst/dyninst>`_ for dynamic or static instrumentation.
Dyninst uses the following required and optional components.
* `TBB <https://github.com/oneapi-src/oneTBB>`_ (required)
* `Elfutils <https://sourceware.org/elfutils/>`_ (required)
* `Libiberty <https://github.com/gcc-mirror/gcc/tree/master/libiberty>`_ (required)
* `OpenMP <https://www.openmp.org/>`_ (optional)
The Dyninst sources bundled with ROCm Systems Profiler do not use Boost.
If you build against an external, older Dyninst install instead, that layout may still require Boost development packages.
* `libunwind <https://www.nongnu.org/libunwind/>`_ for call-stack sampling
* `SQLite <https://github.com/sqlite/sqlite>`_ for database output
* `spdlog <https://github.com/gabime/spdlog>`_ for logging
Any of the third-party packages required by Dyninst, along with Dyninst itself, can be built and installed
during the ROCm Systems Profiler build. The following list indicates the package, the version,
the application that requires the package (for example, ROCm Systems Profiler requires Dyninst
while Dyninst requires TBB), and the CMake option to build the package alongside ROCm Systems Profiler:
.. csv-table::
:header: "Third-Party Library", "Minimum Version", "Required By", "CMake Option"
"Dyninst", "13.0", "ROCm Systems Profiler", "``ROCPROFSYS_BUILD_DYNINST`` (default: OFF)"
"Libunwind", "", "ROCm Systems Profiler", "``ROCPROFSYS_BUILD_LIBUNWIND`` (default: ON)"
"Nlohmann/JSON", "", "ROCm Systems Profiler", "``ROCPROFSYS_BUILD_NLOHMANN_JSON`` (default: ON)"
"spdlog", "", "ROCm Systems Profiler", "``ROCPROFSYS_BUILD_SPDLOG`` (default: ON)"
"SQLite", "", "ROCm Systems Profiler", "``ROCPROFSYS_BUILD_SQLITE`` (default: OFF)"
"TBB", "2018.6", "Dyninst", "``ROCPROFSYS_BUILD_TBB`` (default: OFF)"
"ElfUtils", "0.178", "Dyninst", "``ROCPROFSYS_BUILD_ELFUTILS`` (default: OFF)"
"LibIberty", "", "Dyninst", "``ROCPROFSYS_BUILD_LIBIBERTY`` (default: OFF)"
"OpenMP", "4.x", "Dyninst", ""
ROCm dependencies
-----------------
ROCm is required for GPU profiling features such as GPU hardware counter
collection, tracing, and GPU and AI NIC monitoring.
* :doc:`ROCm <rocm:install/rocm>`
* :doc:`AMD SMI library <amdsmi:index>` for GPU and AI NIC monitoring
* :doc:`ROCprofiler-SDK <rocprofiler-sdk:index>` for GPU hardware counters
and ROCm tracing
Optional third-party packages
-----------------------------
The following packages are optional and can be enabled via the corresponding
CMake options.
* Python
* ``ROCPROFSYS_USE_PYTHON`` enables Python support.
* `PAPI <https://icl.utk.edu/papi/>`__
* MPI
* ``ROCPROFSYS_USE_MPI`` enables full MPI support
* ``ROCPROFSYS_USE_MPI_HEADERS`` enables wrapping of the dynamically-linked MPI C function calls.
(By default, if ROCm Systems Profiler cannot find an OpenMPI MPI distribution, it uses a local copy
of the OpenMPI ``mpi.h``.)
.. csv-table::
:header: "Third-Party Library", "CMake Enable Option"
:widths: 15, 45
"PAPI", "``ROCPROFSYS_USE_PAPI`` (default: ON)"
"MPI", "``ROCPROFSYS_USE_MPI`` (default: OFF)"
"MPI (header-only)", "``ROCPROFSYS_USE_MPI_HEADERS`` (default: ON)"
Installing Dyninst
------------------
The easiest way to install Dyninst is alongside ROCm Systems Profiler.
Building Dyninst alongside ROCm Systems Profiler
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
To install Dyninst alongside ROCm Systems Profiler, configure ROCm Systems Profiler with ``ROCPROFSYS_BUILD_DYNINST=ON``.
Depending on the version of Ubuntu, the ``apt`` package manager might have current enough
versions of the Dyninst TBB and LibIberty dependencies
(use ``apt-get install libtbb-dev libiberty-dev``).
However, it is possible to also build and install the Dyninst dependencies
via ``ROCPROFSYS_BUILD_<DEP>=ON``, as follows:
.. code-block:: shell
git clone --filter=blob:none --sparse https://github.com/ROCm/rocm-systems.git
git -C rocm-systems sparse-checkout set projects/rocprofiler-systems
cmake -B rocprof-sys-build -DROCPROFSYS_BUILD_DYNINST=ON \
-DROCPROFSYS_BUILD_{TBB,ELFUTILS,LIBIBERTY}=ON \
-S rocm-systems/projects/rocprofiler-systems
where ``-DROCPROFSYS_BUILD_{TBB,ELFUTILS,LIBIBERTY}=ON`` is expanded by
the shell to ``-DROCPROFSYS_BUILD_TBB=ON -DROCPROFSYS_BUILD_ELFUTILS=ON ...``
.. _cmake-options:
Building and installing ROCm Systems Profiler
---------------------------------------------
ROCm Systems Profiler has CMake configuration options for MPI support (``ROCPROFSYS_USE_MPI`` or
``ROCPROFSYS_USE_MPI_HEADERS``), OpenMP-Tools (``ROCPROFSYS_USE_OMPT``),
hardware counters via PAPI (``ROCPROFSYS_USE_PAPI``), among other features.
ROCm support is always enabled.
Various additional features can be enabled via the
``TIMEMORY_USE_*`` `CMake options <https://timemory.readthedocs.io/en/develop/installation.html#cmake-options>`_.
Any ``ROCPROFSYS_USE_<VAL>`` option which has a corresponding ``TIMEMORY_USE_<VAL>``
option means that the Timemory support for this feature has been integrated
into Perfetto support for ROCm Systems Profiler, for example, ``ROCPROFSYS_USE_PAPI=<VAL>`` also configures
``TIMEMORY_USE_PAPI=<VAL>``. This means the data that Timemory is able to collect via this package
is passed along to Perfetto and is displayed when the ``.proto`` file is visualized
in `the Perfetto UI <https://ui.perfetto.dev>`_.
.. code-block:: shell
git clone --filter=blob:none --sparse https://github.com/ROCm/rocm-systems.git
git -C rocm-systems sparse-checkout set projects/rocprofiler-systems
cmake \
-B rocprof-sys-build \
-D CMAKE_INSTALL_PREFIX=/opt/rocprofiler-systems \
-D ROCPROFSYS_USE_PYTHON=ON \
-D ROCPROFSYS_BUILD_DYNINST=ON \
-D ROCPROFSYS_BUILD_TBB=ON \
-D ROCPROFSYS_BUILD_ELFUTILS=ON \
-D ROCPROFSYS_BUILD_LIBIBERTY=ON \
-S rocm-systems/projects/rocprofiler-systems
cmake --build rocprof-sys-build --target all --parallel 8
cmake --build rocprof-sys-build --target install
source /opt/rocprofiler-systems/share/rocprofiler-systems/setup-env.sh
.. _build-script:
Using the build script
^^^^^^^^^^^^^^^^^^^^^^
This method automates the CMake process with a script that wraps the CMake
commands and handles build logic, environment variables, and packaging. Run
``./scripts/build-release.sh`` with your desired options to generate packages.
Use ``./scripts/build-release.sh --help`` for more information.
.. code-block:: shell-session
./scripts/build-release.sh --help
Options:
--core [+nopython] [+python] Core (Use '+nopython' to build w/o python, use '+python' to python build with python)
--mpi [+nopython] [+python] MPI (Use '+nopython' to build w/o python, use '+python' to python build with python)
--rocm [+nopython] [+python] ROCm (Use '+nopython' to build w/o python, use '+python' to python build with python)
--rocm-mpi [+nopython] [+python] ROCm + MPI (Use '+nopython' to build w/o python, use '+python' to python build with python)
--mpi-impl [openmpi|mpich] MPI implementation
--lto [on|off] Enable LTO (default: off)
--strip [on|off] Strip libraries (default: off)
--perfetto-tools [on|off] Install perfetto tools (default: on)
--static-libgcc [on|off] Build with static libgcc (default: on)
--static-libstdcxx [on|off] Build with static libstdc++ (default: on)
--hidden-visibility [on|off] Build with hidden visibility (default: on)
--max-threads N Max number of threads supported (default: 2048)
--parallel N Number of parallel build jobs (default: 12)
--generators [STGZ][DEB][RPM][+others] CPack generators (default: stgz deb rpm)
.. _mpi-support-rocprof-sys:
MPI support within ROCm Systems Profiler
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
ROCm Systems Profiler can have full (``ROCPROFSYS_USE_MPI=ON``) or partial (``ROCPROFSYS_USE_MPI_HEADERS=ON``) MPI support.
The only difference between these two modes is whether or not the results collected
via Timemory and/or Perfetto can be aggregated into a single
output file during finalization. When full MPI support is enabled, combining the
Timemory results always occurs, whereas combining the Perfetto
results is configurable via the ``ROCPROFSYS_PERFETTO_COMBINE_TRACES`` setting.
The primary benefits of partial or full MPI support are the automatic wrapping
of MPI functions and the ability
to label output with suffixes which correspond to the ``MPI_COMM_WORLD`` rank ID
instead of having to use the system process identifier (i.e. ``PID``).
In general, it's recommended to use partial MPI support with the OpenMPI
headers as this is the most portable configuration.
If full MPI support is selected, make sure your target application is built
against the same MPI distribution as ROCm Systems Profiler.
For example, do not build ROCm Systems Profiler with MPICH and use it on a target application built against OpenMPI.
If partial support is selected, the reason the OpenMPI headers are recommended instead of the MPICH headers is
because the ``MPI_COMM_WORLD`` in OpenMPI is a pointer to ``ompi_communicator_t`` (8 bytes),
whereas ``MPI_COMM_WORLD`` in MPICH is an ``int`` (4 bytes). Building ROCm Systems Profiler with partial MPI support
and the MPICH headers and then using
ROCm Systems Profiler on an application built against OpenMPI causes a segmentation fault.
This happens because the value of the ``MPI_COMM_WORLD`` is truncated
during the function wrapping before being passed along to the underlying MPI function.
Python support within ROCm Systems Profiler
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
ROCm Systems Profiler supports profiling Python code via the ``ROCPROFSYS_USE_PYTHON`` CMake option.
Python support is enabled via the ``ROCPROFSYS_USE_PYTHON`` and the
``ROCPROFSYS_PYTHON_VERSIONS="<MAJOR>.<MINOR>`` CMake options.
Alternatively, to build multiple Python versions, use
``ROCPROFSYS_PYTHON_VERSIONS="<MAJOR>.<MINOR>;[<MAJOR>.<MINOR>]"``,
and ``ROCPROFSYS_PYTHON_ROOT_DIRS="/path/to/version;[/path/to/version]"`` instead of just ``ROCPROFSYS_PYTHON_VERSIONS``.
When building multiple Python versions, the length of the ``ROCPROFSYS_PYTHON_VERSIONS``
and ``ROCPROFSYS_PYTHON_ROOT_DIRS`` lists must
be the same size.
.. code-block:: shell
cmake --preset release -D ROCPROFSYS_PYTHON_ROOT_DIRS="/usr/bin;/usr/bin" -D ROCPROFSYS_PYTHON_VERSIONS="3.10;3.12"
Post-installation
=================
See :ref:`post-installation-steps` and :ref:`post-installation-troubleshooting`
for more information.