Files
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

148 lines
5.8 KiB
ReStructuredText

.. meta::
:description: Build and install hipThreads from source
:keywords: install, building, hipThreads, AMD, ROCm, source code, cmake, Windows, Linux
.. _source-build:
****************************
Build hipThreads from source
****************************
To build hipThreads as part of the ROCm Core SDK, see `TheRock build instructions <https://github.com/ROCm/TheRock/blob/main/docs/development/README.md>`__.
TheRock is the recommended way to build ROCm components from source.
Alternatively, you can build hipThreads standalone using the following instructions.
.. _hipthreads-prerequisites:
Prerequisites
=============
On Linux, :doc:`ROCm <rocm:install/rocm>` must be installed before hipThreads is built.
hipThreads has the following prerequisites on Linux and Microsoft Windows:
* `CMake <https://cmake.org/>`_ version 3.21 or higher
* `hipcc <https://rocm.docs.amd.com/projects/HIPCC/en/latest/index.html>`_
* ROCm 7.12 or later, which provides HIP and libhipcxx
* A build tool such as ``make`` or `Ninja <https://ninja-build.org/>`_
hipThreads has these additional prerequisites on Windows:
* `HIP SDK for Windows <https://rocm.docs.amd.com/projects/install-on-windows/en/latest/>`_ (or a TheRock build), with ``HIP_PATH`` and ``ROCM_PATH`` set to its root using forward slashes
* `Visual Studio 2022 Build Tools <https://visualstudio.microsoft.com/>`_ with the *Desktop development with C++* workload and the Windows SDK
* `Ninja <https://ninja-build.org/>`_
.. _hipthreads-get-source:
Get the hipThreads source code
==============================
The hipThreads source code is available from the `ROCm libraries GitHub repository <https://github.com/ROCm/rocm-libraries/tree/develop/projects/hipthreads>`_.
Use sparse checkout when cloning the hipThreads project:
.. code-block:: shell
git clone --no-checkout --filter=blob:none https://github.com/ROCm/rocm-libraries.git
cd rocm-libraries
git sparse-checkout init --cone
git sparse-checkout set projects/hipthreads
Then use ``git checkout`` to check out the branch you need.
The develop branch is intended for users who want to preview new features or contribute to the hipThreads code base.
If you don't intend to contribute to the hipThreads code base and won't be previewing features, use a branch that matches the version of ROCm installed on your system.
.. _hipthreads-build-linux:
Build on Linux
==============
By default, hipThreads installs under ``$ROCM_PATH`` to match other ROCm components.
Override this by passing ``-DCMAKE_INSTALL_PREFIX=<path>`` to the CMake configure step.
From the ``projects/hipthreads`` directory, configure, build, and install:
.. code-block:: bash
cmake -B build
cmake --build ./build
sudo cmake --install ./build
The GPU architecture is auto-detected on Linux, so you do not need to set ``-DCMAKE_HIP_ARCHITECTURES``.
.. note::
Installing to ``$ROCM_PATH`` usually requires ``sudo``.
.. _hipthreads-build-windows:
Build on Windows
================
Run all of the following from the **x64 Native Tools Command Prompt for VS 2022** so that CMake can find the MSVC toolchain and the Windows SDK.
Unlike Linux, the GPU architecture is not auto-detected on Windows and must be passed with ``-DCMAKE_HIP_ARCHITECTURES``.
It must match between the hipThreads build and every consumer, or you will get undefined device-symbol errors.
For example, ``gfx1201`` targets the Radeon RX 9070 XT.
.. code-block:: bat
cmake -B build -G Ninja ^
-DCMAKE_CXX_COMPILER="clang++" -DCMAKE_C_COMPILER="clang" ^
-DCMAKE_INSTALL_PREFIX="%HIP_PATH%" ^
-DHIP_PLATFORM=amd ^
-DCMAKE_HIP_ARCHITECTURES=gfx1201 ^
-DCMAKE_BUILD_TYPE=Release .
cmake --build build
cmake --install build
.. _hipthreads-run-tests:
Build and run the tests
=======================
The test suite lives in the ``test/`` directory as ``test/*.cxx`` files and is run with `lit <https://llvm.org/docs/CommandGuide/lit.html>`_.
lit compiles each ``test/*.cxx`` file with ``hipcc`` and runs the whole suite, so it works against any build (``Debug`` or ``Release``):
.. code-block:: bash
pip install lit
HIPTHREADS_SOURCE_DIR=$PWD HIPTHREADS_BUILD_DIR=$PWD/build lit -j 1 test/
Run with ``-j 1`` so the tests run one at a time, since they share the GPU.
For quick iteration on a single test, you can also build the tests through CMake in a ``Debug`` build, which compiles each ``test/*.cxx`` file into an executable named after its source file:
.. code-block:: bash
cmake -B build-debug -DCMAKE_BUILD_TYPE=Debug -DDISABLE_WERROR=ON
cmake --build build-debug -j$(nproc)
./build-debug/bin/hip_thread_mutex_test
./build-debug/bin/hip_thread_condvar_test
.. _hipthreads-build-examples:
Build and run the examples
==========================
The ``examples/`` directory contains standalone CMake projects that each :doc:`find and link hipThreads <../how-to/use-hipthreads-in-a-project>`.
Each example is organized as a series of ``stepN-*`` directories showing an incremental port from CPU ``std::thread`` code to hipThreads.
Each example is built and run on its own.
For instance, to build and run the SIMD-optimized SAXPY example on Linux:
.. code-block:: bash
cd examples/saxpy/step3-simdize
cmake -B build
cmake --build ./build
./build/bin/saxpy
On Windows, use the same Ninja, clang, and ``-DCMAKE_HIP_ARCHITECTURES`` flags as the library build above.
The exact configure, build, and run commands for each step, on both Linux and Windows, are recorded in a comment at the bottom of that step's ``CMakeLists.txt``.
Some examples need extra setup — for example, the sparse matrix multiply data is pulled with ``git lfs``, and llama3.c takes a model path as an argument — so check the ``CMakeLists.txt`` footer for the step you are building.
After installing, see :doc:`../how-to/use-hipthreads-in-a-project` to consume hipThreads from your own CMake project.