Add 'projects/hip/' from commit 'e74b05a7bd9454b97dc04d7cc4b66d1fe6c534a7'
git-subtree-dir: projects/hip git-subtree-mainline:64df0940b8git-subtree-split:e74b05a7bd
This commit is contained in:
@@ -0,0 +1,241 @@
|
||||
.. meta::
|
||||
:description: This page gives instructions on how to build HIP from source.
|
||||
:keywords: AMD, ROCm, HIP, build, build instructions, source
|
||||
|
||||
*******************************************
|
||||
Build HIP from source
|
||||
*******************************************
|
||||
|
||||
Prerequisites
|
||||
=================================================
|
||||
|
||||
HIP code can be developed either on AMD ROCm platform using HIP-Clang compiler, or a CUDA platform with ``nvcc`` installed.
|
||||
Before building and running HIP, make sure drivers and prebuilt packages are installed properly on the platform.
|
||||
|
||||
You also need to install Python 3, which includes the ``CppHeaderParser`` package.
|
||||
Install Python 3 using the following command:
|
||||
|
||||
.. code-block:: shell
|
||||
|
||||
apt-get install python3
|
||||
|
||||
Check and install ``CppHeaderParser`` package using the command:
|
||||
|
||||
.. code-block:: shell
|
||||
|
||||
pip3 install CppHeaderParser
|
||||
|
||||
Install ``ROCm LLVM`` package using the command:
|
||||
|
||||
.. code-block:: shell
|
||||
|
||||
apt-get install rocm-llvm-dev
|
||||
|
||||
|
||||
.. _Building the HIP runtime:
|
||||
|
||||
Building the HIP runtime
|
||||
==========================================================
|
||||
|
||||
Set the repository branch using the variable: ``ROCM_BRANCH``. For example, for ROCm 6.1, use:
|
||||
|
||||
.. code-block:: shell
|
||||
|
||||
export ROCM_BRANCH=rocm-6.1.x
|
||||
|
||||
.. tab-set::
|
||||
|
||||
.. tab-item:: AMD
|
||||
:sync: amd
|
||||
|
||||
#. Get HIP source code.
|
||||
|
||||
.. note::
|
||||
Starting in ROCM 5.6, CLR is a new repository that includes the former ROCclr, HIPAMD and
|
||||
OpenCl repositories. OpenCL provides headers that ROCclr runtime depends on.
|
||||
|
||||
.. note::
|
||||
Starting in ROCM 6.1, a new repository ``hipother`` is added to ROCm, which is branched out from HIP.
|
||||
``hipother`` provides files required to support the HIP back-end implementation on some non-AMD platforms,
|
||||
like NVIDIA.
|
||||
|
||||
.. code-block:: shell
|
||||
|
||||
git clone -b "$ROCM_BRANCH" https://github.com/ROCm/clr.git
|
||||
git clone -b "$ROCM_BRANCH" https://github.com/ROCm/hip.git
|
||||
|
||||
CLR (Compute Language Runtime) repository includes ROCclr, HIPAMD and OpenCL.
|
||||
|
||||
ROCclr (ROCm Compute Language Runtime) is a virtual device interface which
|
||||
is defined on the AMD platform. HIP runtime uses ROCclr to interact with different backends.
|
||||
|
||||
HIPAMD provides implementation specifically for HIP on the AMD platform.
|
||||
|
||||
OpenCL provides headers that ROCclr runtime currently depends on.
|
||||
hipother provides headers and implementation specifically for non-AMD HIP platforms, like NVIDIA.
|
||||
|
||||
#. Set the environment variables.
|
||||
|
||||
.. code-block:: shell
|
||||
|
||||
export CLR_DIR="$(readlink -f clr)"
|
||||
export HIP_DIR="$(readlink -f hip)"
|
||||
|
||||
|
||||
#. Build HIP.
|
||||
|
||||
.. code-block:: shell
|
||||
|
||||
cd "$CLR_DIR"
|
||||
mkdir -p build; cd build
|
||||
cmake -DHIP_COMMON_DIR=$HIP_DIR -DHIP_PLATFORM=amd -DCMAKE_PREFIX_PATH="/opt/rocm/" -DCMAKE_INSTALL_PREFIX=$PWD/install -DHIP_CATCH_TEST=0 -DCLR_BUILD_HIP=ON -DCLR_BUILD_OCL=OFF ..
|
||||
|
||||
make -j$(nproc)
|
||||
sudo make install
|
||||
|
||||
.. note::
|
||||
|
||||
Note, if you don't specify ``CMAKE_INSTALL_PREFIX``, the HIP runtime is installed at
|
||||
``<ROCM_PATH>``.
|
||||
|
||||
By default, release version of HIP is built. If need debug version, you can put the option ``CMAKE_BUILD_TYPE=Debug`` in the command line.
|
||||
|
||||
Default paths and environment variables:
|
||||
|
||||
* HIP is installed into ``<ROCM_PATH>``. This can be overridden by setting the ``INSTALL_PREFIX`` as the command option.
|
||||
environment variable.
|
||||
* HSA is in ``<ROCM_PATH>``. This can be overridden by setting the ``HSA_PATH``
|
||||
environment variable.
|
||||
* Clang is in ``<ROCM_PATH>/llvm/bin``. This can be overridden by setting the
|
||||
``HIP_CLANG_PATH`` environment variable.
|
||||
* The device library is in ``<ROCM_PATH>/lib``. This can be overridden by setting the
|
||||
``DEVICE_LIB_PATH`` environment variable.
|
||||
* Optionally, you can add ``<ROCM_PATH>/bin`` to your ``PATH``, which can make it easier to
|
||||
use the tools.
|
||||
* Optionally, you can set ``HIPCC_VERBOSE=7`` to output the command line for compilation.
|
||||
|
||||
After you run the ``make install`` command, HIP is installed to ``<ROCM_PATH>`` by default, or ``$PWD/install/hip`` while ``INSTALL_PREFIX`` is defined.
|
||||
|
||||
#. Generate a profiling header after adding/changing a HIP API.
|
||||
|
||||
When you add or change a HIP API, you may need to generate a new ``hip_prof_str.h`` header.
|
||||
This header is used by ROCm tools to track HIP APIs, such as ``rocprofiler`` and ``roctracer``.
|
||||
|
||||
To generate the header after your change, use the ``hip_prof_gen.py`` tool located in
|
||||
``hipamd/src``.
|
||||
|
||||
Usage:
|
||||
|
||||
.. code-block:: shell
|
||||
|
||||
`hip_prof_gen.py [-v] <input HIP API .h file> <patched srcs path> <previous output> [<output>]`
|
||||
|
||||
Flags:
|
||||
|
||||
* ``-v``: Verbose messages
|
||||
* ``-r``: Process source directory recursively
|
||||
* ``-t``: API types matching check
|
||||
* ``--priv``: Private API check
|
||||
* ``-e``: On error exit mode
|
||||
* ``-p``: ``HIP_INIT_API`` macro patching mode
|
||||
|
||||
Example usage:
|
||||
|
||||
.. code-block:: shell
|
||||
|
||||
hip_prof_gen.py -v -p -t --priv <hip>/include/hip/hip_runtime_api.h \
|
||||
<hipamd>/src <hipamd>/include/hip/amd_detail/hip_prof_str.h \
|
||||
<hipamd>/include/hip/amd_detail/hip_prof_str.h.new
|
||||
|
||||
.. tab-item:: NVIDIA
|
||||
:sync: nvidia
|
||||
|
||||
#. Get the HIP source code.
|
||||
|
||||
.. code-block:: shell
|
||||
|
||||
git clone -b "$ROCM_BRANCH" https://github.com/ROCm/clr.git
|
||||
git clone -b "$ROCM_BRANCH" https://github.com/ROCm/hip.git
|
||||
git clone -b "$ROCM_BRANCH" https://github.com/ROCm/hipother.git
|
||||
|
||||
#. Set the environment variables.
|
||||
|
||||
.. code-block:: shell
|
||||
|
||||
export CLR_DIR="$(readlink -f clr)"
|
||||
export HIP_DIR="$(readlink -f hip)"
|
||||
export HIP_OTHER="$(readlink -f hipother)"
|
||||
|
||||
#. Build HIP.
|
||||
|
||||
.. code-block:: shell
|
||||
|
||||
cd "$CLR_DIR"
|
||||
mkdir -p build; cd build
|
||||
cmake -DHIP_COMMON_DIR=$HIP_DIR -DHIP_PLATFORM=nvidia -DCMAKE_INSTALL_PREFIX=$PWD/install -DHIP_CATCH_TEST=0 -DCLR_BUILD_HIP=ON -DCLR_BUILD_OCL=OFF -DHIPNV_DIR=$HIP_OTHER/hipnv ..
|
||||
make -j$(nproc)
|
||||
sudo make install
|
||||
|
||||
Build HIP tests
|
||||
=================================================
|
||||
|
||||
.. tab-set::
|
||||
|
||||
.. tab-item:: AMD
|
||||
:sync: amd
|
||||
|
||||
* Build HIP catch tests.
|
||||
|
||||
HIP catch tests are separate from the HIP project and use Catch2.
|
||||
|
||||
* Get HIP tests source code.
|
||||
|
||||
.. code-block:: shell
|
||||
|
||||
git clone -b "$ROCM_BRANCH" https://github.com/ROCm/hip-tests.git
|
||||
|
||||
* Build HIP tests from source.
|
||||
|
||||
.. code-block:: shell
|
||||
|
||||
export HIPTESTS_DIR="$(readlink -f hip-tests)"
|
||||
cd "$HIPTESTS_DIR"
|
||||
mkdir -p build; cd build
|
||||
cmake ../catch -DHIP_PLATFORM=amd -DHIP_PATH=$CLR_DIR/build/install # or any path where HIP is installed; for example: ``/opt/rocm``
|
||||
make build_tests
|
||||
ctest # run tests
|
||||
|
||||
HIP catch tests are built in ``$HIPTESTS_DIR/build``.
|
||||
|
||||
To run any single catch test, use this example:
|
||||
|
||||
.. code-block:: shell
|
||||
|
||||
cd $HIPTESTS_DIR/build/catch_tests/unit/texture
|
||||
./TextureTest
|
||||
|
||||
* Build a HIP Catch2 standalone test.
|
||||
|
||||
.. code-block:: shell
|
||||
|
||||
cd "$HIPTESTS_DIR"
|
||||
hipcc $HIPTESTS_DIR/catch/unit/memory/hipPointerGetAttributes.cc \
|
||||
-I ./catch/include ./catch/hipTestMain/standalone_main.cc \
|
||||
-I ./catch/external/Catch2 -o hipPointerGetAttributes
|
||||
./hipPointerGetAttributes
|
||||
...
|
||||
|
||||
All tests passed
|
||||
|
||||
.. tab-item:: NVIDIA
|
||||
:sync: nvidia
|
||||
|
||||
The commands to build HIP tests on an NVIDIA platform are the same as on an AMD platform.
|
||||
However, you must first set ``-DHIP_PLATFORM=nvidia``.
|
||||
|
||||
|
||||
Run HIP
|
||||
=================================================
|
||||
|
||||
After installation and building HIP, you can compile your application and run.
|
||||
Simple examples can be found in the `ROCm-examples repository <https://github.com/ROCm/rocm-examples>`_.
|
||||
@@ -0,0 +1,111 @@
|
||||
.. meta::
|
||||
:description: This page explains how to install HIP
|
||||
:keywords: AMD, ROCm, HIP, install, installation
|
||||
|
||||
*******************************************
|
||||
Install HIP
|
||||
*******************************************
|
||||
|
||||
HIP can be installed on AMD (ROCm with HIP-Clang) and NVIDIA (CUDA with NVCC) platforms.
|
||||
|
||||
.. note::
|
||||
|
||||
The version definition for the HIP runtime is different from CUDA. On AMD
|
||||
platforms, the :cpp:func:`hipRuntimeGetVersion` function returns the HIP
|
||||
runtime version. On NVIDIA platforms, this function returns the CUDA runtime
|
||||
version.
|
||||
|
||||
.. _install_prerequisites:
|
||||
|
||||
Prerequisites
|
||||
=======================================
|
||||
|
||||
.. tab-set::
|
||||
|
||||
.. tab-item:: AMD
|
||||
:sync: amd
|
||||
|
||||
Refer to the Prerequisites section in the ROCm install guides:
|
||||
|
||||
* :doc:`rocm-install-on-linux:reference/system-requirements`
|
||||
* :doc:`rocm-install-on-windows:reference/system-requirements`
|
||||
|
||||
.. tab-item:: NVIDIA
|
||||
:sync: nvidia
|
||||
|
||||
With NVIDIA GPUs, HIP requires unified memory. All CUDA-enabled NVIDIA
|
||||
GPUs with compute capability 5.0 or later should be supported. For more
|
||||
information, see `NVIDIA's list of CUDA enabled GPUs <https://developer.nvidia.com/cuda-gpus>`_.
|
||||
|
||||
Installation
|
||||
=======================================
|
||||
|
||||
.. tab-set::
|
||||
|
||||
.. tab-item:: AMD
|
||||
:sync: amd
|
||||
|
||||
HIP is automatically installed during the ROCm installation. If you haven't yet installed ROCm, you
|
||||
can find installation instructions here:
|
||||
|
||||
* :doc:`rocm-install-on-linux:index`
|
||||
* :doc:`rocm-install-on-windows:index`
|
||||
|
||||
By default, HIP is installed into ``/opt/rocm``.
|
||||
|
||||
.. note::
|
||||
There is no autodetection for the HIP installation. If you choose to install it somewhere other than the default location, you must set the ``HIP_PATH`` environment variable as explained in `Build HIP from source <./build.html>`_.
|
||||
|
||||
.. tab-item:: NVIDIA
|
||||
:sync: nvidia
|
||||
|
||||
#. Install the NVIDIA toolkit.
|
||||
|
||||
The latest release can be found here:
|
||||
`CUDA Toolkit <https://developer.nvidia.com/cuda-downloads>`_.
|
||||
|
||||
#. Setup the radeon repo.
|
||||
|
||||
.. code-block::shell
|
||||
|
||||
# Replace url with appropriate link in the table below
|
||||
wget https://repo.radeon.com/amdgpu-install/6.2/distro/version_name/amdgpu-install_6.2.60200-1_all.deb
|
||||
sudo apt install ./amdgpu-install_6.2.60200-1_all.deb
|
||||
sudo apt update
|
||||
|
||||
.. list-table:: amdgpu-install links
|
||||
:widths: 25 100
|
||||
:header-rows: 1
|
||||
|
||||
* - Ubuntu version
|
||||
- URL
|
||||
* - 24.04
|
||||
- https://repo.radeon.com/amdgpu-install/6.2.4/ubuntu/noble/amdgpu-install_6.2.60204-1_all.deb
|
||||
* - 22.04
|
||||
- https://repo.radeon.com/amdgpu-install/6.2.4/ubuntu/jammy/amdgpu-install_6.2.60204-1_all.deb
|
||||
|
||||
#. Install the ``hip-runtime-nvidia`` and ``hip-dev`` packages. This installs the CUDA SDK and HIP
|
||||
porting layer.
|
||||
|
||||
.. code-block:: shell
|
||||
|
||||
apt-get install hip-runtime-nvidia hip-dev
|
||||
|
||||
The default paths are:
|
||||
* CUDA SDK: ``/usr/local/cuda``
|
||||
* HIP: ``/opt/rocm``
|
||||
|
||||
#. Set the HIP_PLATFORM to nvidia.
|
||||
|
||||
.. code-block:: shell
|
||||
|
||||
export HIP_PLATFORM="nvidia"
|
||||
|
||||
Verify your installation
|
||||
==========================================================
|
||||
|
||||
Run ``hipconfig`` in your installation path.
|
||||
|
||||
.. code-block:: shell
|
||||
|
||||
/opt/rocm/bin/hipconfig --full
|
||||
Reference in New Issue
Block a user