From 72bc4d4d856dce1051b32187e8471a05c13b51d9 Mon Sep 17 00:00:00 2001 From: Vladislav Perevezentsev Date: Mon, 10 Feb 2025 06:44:28 -0800 Subject: [PATCH 01/15] Enable CMake options to build dpnp on AMD --- CMakeLists.txt | 75 +++++++++++++++---- .../extensions/statistics/CMakeLists.txt | 6 +- dpnp/backend/extensions/ufunc/CMakeLists.txt | 6 +- 3 files changed, 69 insertions(+), 18 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 50f965fc7208..1581f308a35f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -71,31 +71,71 @@ option(DPNP_TARGET_CUDA "Build DPNP to target CUDA devices" OFF ) +option(DPNP_TARGET_HIP + "Build DPNP to target HIP devices" + OFF +) option(DPNP_USE_ONEMKL_INTERFACES "Build DPNP with oneMKL Interfaces" OFF ) +set(HIP_TARGETS "" CACHE STRING "HIP architecture for target") + +#Add rocm root dir to CMAKE_PREFIX_PATH, usually "/opt/rocm" +if(DPNP_TARGET_HIP) + if(DEFINED ENV{ROCM_PATH}) + set(ROCM_PATH $ENV{ROCM_PATH}) + else() + set(ROCM_PATH "/opt/rocm") + endif() + list(APPEND CMAKE_PREFIX_PATH ${ROCM_PATH}) +endif() + set(_dpnp_sycl_targets) +set(_dpnp_amd_targets) +set(_use_onemkl_interfaces OFF) set(_use_onemkl_interfaces_cuda OFF) +set(_use_onemkl_interfaces_hip OFF) + +set(_dpnp_sycl_target_compile_options) +set(_dpnp_sycl_target_link_options) + if ("x${DPNP_SYCL_TARGETS}" STREQUAL "x") - if(DPNP_TARGET_CUDA) - set(_dpnp_sycl_targets "nvptx64-nvidia-cuda,spir64-unknown-unknown") - set(_use_onemkl_interfaces_cuda ON) - else() - if(DEFINED ENV{DPNP_TARGET_CUDA}) - set(_dpnp_sycl_targets "nvptx64-nvidia-cuda,spir64-unknown-unknown") - set(_use_onemkl_interfaces_cuda ON) - endif() - endif() + if(DPNP_TARGET_CUDA) + set(_dpnp_sycl_targets "nvptx64-nvidia-cuda,spir64-unknown-unknown") + set(_use_onemkl_interfaces_cuda ON) + endif() + if(DPNP_TARGET_HIP) + if (NOT "x${HIP_TARGETS}" STREQUAL "x") + set(_dpnp_amd_targets ${HIP_TARGETS}) + set(_use_onemkl_interfaces_hip ON) + if(_dpnp_sycl_targets) + set(_dpnp_sycl_targets "amdgcn-amd-amdhsa,${_dpnp_sycl_targets}") + else() + set(_dpnp_sycl_targets "amdgcn-amd-amdhsa,spir64-unknown-unknown") + endif() + else() + message(FATAL_ERROR "HIP_TARGETS must be specified when using HIP backend") + endif() + endif() else() - set(_dpnp_sycl_targets ${DPNP_SYCL_TARGETS}) + set(_dpnp_sycl_targets ${DPNP_SYCL_TARGETS}) + if (NOT "x${HIP_TARGETS}" STREQUAL "x") + set(_dpnp_amd_targets ${HIP_TARGETS}) + set(_use_onemkl_interfaces_hip ON) + endif() endif() -if(_dpnp_sycl_targets) +if (_dpnp_sycl_targets) message(STATUS "Compiling for -fsycl-targets=${_dpnp_sycl_targets}") + list(APPEND _dpnp_sycl_target_compile_options -fsycl-targets=${_dpnp_sycl_targets}) + list(APPEND _dpnp_sycl_target_link_options -fsycl-targets=${_dpnp_sycl_targets}) + if(_dpnp_amd_targets) + list(APPEND _dpnp_sycl_target_compile_options -Xsycl-target-backend=amdgcn-amd-amdhsa --offload-arch=${_dpnp_amd_targets}) + list(APPEND _dpnp_sycl_target_link_options -Xsycl-target-backend=amdgcn-amd-amdhsa --offload-arch=${_dpnp_amd_targets}) + endif() endif() -set(_use_onemkl_interfaces OFF) if(DPNP_USE_ONEMKL_INTERFACES) set(_use_onemkl_interfaces ON) else() @@ -107,13 +147,20 @@ endif() if(_use_onemkl_interfaces) set(BUILD_FUNCTIONAL_TESTS False) set(BUILD_EXAMPLES False) + set(ENABLE_MKLGPU_BACKEND True) + set(ENABLE_MKLCPU_BACKEND True) + if(_use_onemkl_interfaces_cuda) set(ENABLE_CUBLAS_BACKEND True) set(ENABLE_CUSOLVER_BACKEND True) set(ENABLE_CUFFT_BACKEND True) # set(ENABLE_CURAND_BACKEND True) - set(ENABLE_MKLGPU_BACKEND True) - set(ENABLE_MKLCPU_BACKEND True) + endif() + if(_use_onemkl_interfaces_hip) + set(ENABLE_ROCBLAS_BACKEND True) + set(ENABLE_ROCSOLVER_BACKEND True) + set(ENABLE_ROCFFT_BACKEND True) + # set(ENABLE_ROCRAND_BACKEND True) endif() if(DPNP_ONEMKL_INTERFACES_DIR) diff --git a/dpnp/backend/extensions/statistics/CMakeLists.txt b/dpnp/backend/extensions/statistics/CMakeLists.txt index e2529cd04859..77b5aec93646 100644 --- a/dpnp/backend/extensions/statistics/CMakeLists.txt +++ b/dpnp/backend/extensions/statistics/CMakeLists.txt @@ -45,12 +45,14 @@ if(_dpnp_sycl_targets) target_compile_options( ${python_module_name} PRIVATE - -fsycl-targets=${_dpnp_sycl_targets} + ${_dpnp_sycl_target_compile_options} + # -fsycl-targets=${_dpnp_sycl_targets} ) target_link_options( ${python_module_name} PRIVATE - -fsycl-targets=${_dpnp_sycl_targets} + ${_dpnp_sycl_target_link_options} + # -fsycl-targets=${_dpnp_sycl_targets} ) endif() diff --git a/dpnp/backend/extensions/ufunc/CMakeLists.txt b/dpnp/backend/extensions/ufunc/CMakeLists.txt index 5f892506b81c..49e799e25be3 100644 --- a/dpnp/backend/extensions/ufunc/CMakeLists.txt +++ b/dpnp/backend/extensions/ufunc/CMakeLists.txt @@ -77,12 +77,14 @@ if(_dpnp_sycl_targets) target_compile_options( ${python_module_name} PRIVATE - -fsycl-targets=${_dpnp_sycl_targets} + ${_dpnp_sycl_target_compile_options} + # -fsycl-targets=${_dpnp_sycl_targets} ) target_link_options( ${python_module_name} PRIVATE - -fsycl-targets=${_dpnp_sycl_targets} + ${_dpnp_sycl_target_link_options} + # -fsycl-targets=${_dpnp_sycl_targets} ) endif() From 5f11917b79748d7755efdfde12a2872bddd0dd3b Mon Sep 17 00:00:00 2001 From: Vladislav Perevezentsev Date: Mon, 10 Feb 2025 06:50:50 -0800 Subject: [PATCH 02/15] Add build_locally args for AMD build --- scripts/build_locally.py | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/scripts/build_locally.py b/scripts/build_locally.py index 33732829650d..c3d5009066cb 100644 --- a/scripts/build_locally.py +++ b/scripts/build_locally.py @@ -39,6 +39,7 @@ def run( verbose=False, cmake_opts="", target="intel", + arch=None, onemkl_interfaces=False, onemkl_interfaces_dir=None, ): @@ -104,6 +105,16 @@ def run( # Always builds using oneMKL interfaces for the cuda target onemkl_interfaces = True + if target == "hip": + if not arch: + raise ValueError("--arch is required when --target=hip") + cmake_args += [ + "-DDPNP_TARGET_HIP=ON", + f"-DHIP_TARGETS={arch}", + ] + # Always builds using oneMKL interfaces for the hip target + onemkl_interfaces = True + if onemkl_interfaces: cmake_args += [ "-DDPNP_USE_ONEMKL_INTERFACES=ON", @@ -177,6 +188,12 @@ def run( default="intel", type=str, ) + driver.add_argument( + "--arch", + help="Architecture for HIP target", + dest="arch", + type=str, + ) driver.add_argument( "--onemkl-interfaces", help="Build using oneMKL Interfaces", @@ -244,6 +261,7 @@ def run( verbose=args.verbose, cmake_opts=args.cmake_opts, target=args.target, + arch=args.arch, onemkl_interfaces=args.onemkl_interfaces, onemkl_interfaces_dir=args.onemkl_interfaces_dir, ) From c07e0a7ede1f9ce9b7d4cba9c681b44ed96d4d62 Mon Sep 17 00:00:00 2001 From: Vladislav Perevezentsev Date: Mon, 10 Feb 2025 07:07:03 -0800 Subject: [PATCH 03/15] Remove unused lines --- dpnp/backend/extensions/statistics/CMakeLists.txt | 2 -- dpnp/backend/extensions/ufunc/CMakeLists.txt | 2 -- 2 files changed, 4 deletions(-) diff --git a/dpnp/backend/extensions/statistics/CMakeLists.txt b/dpnp/backend/extensions/statistics/CMakeLists.txt index 77b5aec93646..eba9d663712e 100644 --- a/dpnp/backend/extensions/statistics/CMakeLists.txt +++ b/dpnp/backend/extensions/statistics/CMakeLists.txt @@ -46,13 +46,11 @@ if(_dpnp_sycl_targets) ${python_module_name} PRIVATE ${_dpnp_sycl_target_compile_options} - # -fsycl-targets=${_dpnp_sycl_targets} ) target_link_options( ${python_module_name} PRIVATE ${_dpnp_sycl_target_link_options} - # -fsycl-targets=${_dpnp_sycl_targets} ) endif() diff --git a/dpnp/backend/extensions/ufunc/CMakeLists.txt b/dpnp/backend/extensions/ufunc/CMakeLists.txt index 49e799e25be3..d3f455cf39e8 100644 --- a/dpnp/backend/extensions/ufunc/CMakeLists.txt +++ b/dpnp/backend/extensions/ufunc/CMakeLists.txt @@ -78,13 +78,11 @@ if(_dpnp_sycl_targets) ${python_module_name} PRIVATE ${_dpnp_sycl_target_compile_options} - # -fsycl-targets=${_dpnp_sycl_targets} ) target_link_options( ${python_module_name} PRIVATE ${_dpnp_sycl_target_link_options} - # -fsycl-targets=${_dpnp_sycl_targets} ) endif() From 323bbb4c6769205febed4aefeb788dd4348dd288 Mon Sep 17 00:00:00 2001 From: Vladislav Perevezentsev Date: Tue, 11 Feb 2025 04:58:39 -0800 Subject: [PATCH 04/15] Remove ROCM_PATH logic --- CMakeLists.txt | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 1581f308a35f..feed69f825dc 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -81,16 +81,6 @@ option(DPNP_USE_ONEMKL_INTERFACES ) set(HIP_TARGETS "" CACHE STRING "HIP architecture for target") -#Add rocm root dir to CMAKE_PREFIX_PATH, usually "/opt/rocm" -if(DPNP_TARGET_HIP) - if(DEFINED ENV{ROCM_PATH}) - set(ROCM_PATH $ENV{ROCM_PATH}) - else() - set(ROCM_PATH "/opt/rocm") - endif() - list(APPEND CMAKE_PREFIX_PATH ${ROCM_PATH}) -endif() - set(_dpnp_sycl_targets) set(_dpnp_amd_targets) set(_use_onemkl_interfaces OFF) From e111ce128bc129b5d723fab36558eafb9fafe103 Mon Sep 17 00:00:00 2001 From: Vladislav Perevezentsev Date: Tue, 11 Feb 2025 04:59:40 -0800 Subject: [PATCH 05/15] Support amd build for indexing extension --- dpnp/backend/extensions/indexing/CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dpnp/backend/extensions/indexing/CMakeLists.txt b/dpnp/backend/extensions/indexing/CMakeLists.txt index 34f4fe380748..435a19547f46 100644 --- a/dpnp/backend/extensions/indexing/CMakeLists.txt +++ b/dpnp/backend/extensions/indexing/CMakeLists.txt @@ -38,12 +38,12 @@ if(_dpnp_sycl_targets) target_compile_options( ${python_module_name} PRIVATE - -fsycl-targets=${_dpnp_sycl_targets} + ${_dpnp_sycl_target_compile_options} ) target_link_options( ${python_module_name} PRIVATE - -fsycl-targets=${_dpnp_sycl_targets} + ${_dpnp_sycl_target_link_options} ) endif() From 310cd82b4048db2072283507930b4d92ea6fca55 Mon Sep 17 00:00:00 2001 From: Vladislav Perevezentsev Date: Fri, 14 Mar 2025 04:45:31 -0700 Subject: [PATCH 06/15] Support amd build for window extension --- dpnp/backend/extensions/window/CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dpnp/backend/extensions/window/CMakeLists.txt b/dpnp/backend/extensions/window/CMakeLists.txt index 2744ceb027c8..1083885bf7cd 100644 --- a/dpnp/backend/extensions/window/CMakeLists.txt +++ b/dpnp/backend/extensions/window/CMakeLists.txt @@ -37,12 +37,12 @@ if(_dpnp_sycl_targets) target_compile_options( ${python_module_name} PRIVATE - -fsycl-targets=${_dpnp_sycl_targets} + ${_dpnp_sycl_target_compile_options} ) target_link_options( ${python_module_name} PRIVATE - -fsycl-targets=${_dpnp_sycl_targets} + ${_dpnp_sycl_target_link_options} ) endif() From c3adf4e6a1107a131edff8a13ed6bb4e52763fe0 Mon Sep 17 00:00:00 2001 From: Vladislav Perevezentsev Date: Mon, 17 Mar 2025 03:38:01 -0700 Subject: [PATCH 07/15] Set HIP specific flags for MKL --- CMakeLists.txt | 16 ++++++++++++++-- dpnp/backend/extensions/blas/CMakeLists.txt | 4 ++-- dpnp/backend/extensions/fft/CMakeLists.txt | 4 ++-- dpnp/backend/extensions/lapack/CMakeLists.txt | 4 ++-- 4 files changed, 20 insertions(+), 8 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index d4bed884e653..35fc3fe53492 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -89,6 +89,8 @@ set(_use_onemkl_interfaces_hip OFF) set(_dpnp_sycl_target_compile_options) set(_dpnp_sycl_target_link_options) +set(_dpnp_sycl_mkl_target_compile_options) +set(_dpnp_sycl_mkl_target_link_options) if ("x${DPNP_SYCL_TARGETS}" STREQUAL "x") if(DPNP_TARGET_CUDA) @@ -120,9 +122,19 @@ if (_dpnp_sycl_targets) message(STATUS "Compiling for -fsycl-targets=${_dpnp_sycl_targets}") list(APPEND _dpnp_sycl_target_compile_options -fsycl-targets=${_dpnp_sycl_targets}) list(APPEND _dpnp_sycl_target_link_options -fsycl-targets=${_dpnp_sycl_targets}) + list(APPEND _dpnp_sycl_mkl_target_compile_options -fsycl-targets=${_dpnp_sycl_targets}) + list(APPEND _dpnp_sycl_mkl_target_link_options -fsycl-targets=${_dpnp_sycl_targets}) if(_dpnp_amd_targets) - list(APPEND _dpnp_sycl_target_compile_options -Xsycl-target-backend=amdgcn-amd-amdhsa --offload-arch=${_dpnp_amd_targets}) - list(APPEND _dpnp_sycl_target_link_options -Xsycl-target-backend=amdgcn-amd-amdhsa --offload-arch=${_dpnp_amd_targets}) + set(_dpnp_hip_compile_options -Xsycl-target-backend=amdgcn-amd-amdhsa --offload-arch=${_dpnp_amd_targets}) + set(_dpnp_hip_mkl_compile_options -Xsycl-target-backend --offload-arch=${_dpnp_amd_targets}) + + # Append HIP-specific flags for general SYCL modules + list(APPEND _dpnp_sycl_target_compile_options ${_dpnp_hip_compile_options}) + list(APPEND _dpnp_sycl_target_link_options ${_dpnp_hip_compile_options}) + + # Append HIP-specific flags for MKL modules + list(APPEND _dpnp_sycl_mkl_target_compile_options -fsycl-unnamed-lambda ${_dpnp_hip_mkl_compile_options}) + list(APPEND _dpnp_sycl_mkl_target_link_options ${_dpnp_hip_mkl_compile_options}) endif() endif() diff --git a/dpnp/backend/extensions/blas/CMakeLists.txt b/dpnp/backend/extensions/blas/CMakeLists.txt index d5639a24b268..3bf15efc3f7a 100644 --- a/dpnp/backend/extensions/blas/CMakeLists.txt +++ b/dpnp/backend/extensions/blas/CMakeLists.txt @@ -40,12 +40,12 @@ if(_dpnp_sycl_targets) target_compile_options( ${python_module_name} PRIVATE - -fsycl-targets=${_dpnp_sycl_targets} + ${_dpnp_sycl_mkl_target_compile_options} ) target_link_options( ${python_module_name} PRIVATE - -fsycl-targets=${_dpnp_sycl_targets} + ${_dpnp_sycl_mkl_target_link_options} ) endif() diff --git a/dpnp/backend/extensions/fft/CMakeLists.txt b/dpnp/backend/extensions/fft/CMakeLists.txt index 327c85a96dac..ddc465fc2fc3 100644 --- a/dpnp/backend/extensions/fft/CMakeLists.txt +++ b/dpnp/backend/extensions/fft/CMakeLists.txt @@ -39,12 +39,12 @@ if(_dpnp_sycl_targets) target_compile_options( ${python_module_name} PRIVATE - -fsycl-targets=${_dpnp_sycl_targets} + ${_dpnp_sycl_mkl_target_compile_options} ) target_link_options( ${python_module_name} PRIVATE - -fsycl-targets=${_dpnp_sycl_targets} + ${_dpnp_sycl_mkl_target_link_options} ) endif() diff --git a/dpnp/backend/extensions/lapack/CMakeLists.txt b/dpnp/backend/extensions/lapack/CMakeLists.txt index a196b6fac8d0..6f9fad44affa 100644 --- a/dpnp/backend/extensions/lapack/CMakeLists.txt +++ b/dpnp/backend/extensions/lapack/CMakeLists.txt @@ -57,12 +57,12 @@ if(_dpnp_sycl_targets) target_compile_options( ${python_module_name} PRIVATE - -fsycl-targets=${_dpnp_sycl_targets} + ${_dpnp_sycl_mkl_target_compile_options} ) target_link_options( ${python_module_name} PRIVATE - -fsycl-targets=${_dpnp_sycl_targets} + ${_dpnp_sycl_mkl_target_link_options} ) endif() From 574ea90b168e2e4b85f776055d9c5cadce3d2db2 Mon Sep 17 00:00:00 2001 From: Vladislav Perevezentsev Date: Tue, 18 Mar 2025 03:08:09 -0700 Subject: [PATCH 08/15] pdate logic to use --target-hip --- CMakeLists.txt | 27 +++++++++++++-------------- scripts/build_locally.py | 20 ++++++++++---------- 2 files changed, 23 insertions(+), 24 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 35fc3fe53492..291e2108a274 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -71,10 +71,6 @@ option(DPNP_TARGET_CUDA "Build DPNP to target CUDA devices" OFF ) -option(DPNP_TARGET_HIP - "Build DPNP to target HIP devices" - OFF -) option(DPNP_USE_ONEMKL_INTERFACES "Build DPNP with oneMKL Interfaces" OFF @@ -97,24 +93,27 @@ if ("x${DPNP_SYCL_TARGETS}" STREQUAL "x") set(_dpnp_sycl_targets "nvptx64-nvidia-cuda,spir64-unknown-unknown") set(_use_onemkl_interfaces_cuda ON) endif() - if(DPNP_TARGET_HIP) - if (NOT "x${HIP_TARGETS}" STREQUAL "x") - set(_dpnp_amd_targets ${HIP_TARGETS}) - set(_use_onemkl_interfaces_hip ON) - if(_dpnp_sycl_targets) - set(_dpnp_sycl_targets "amdgcn-amd-amdhsa,${_dpnp_sycl_targets}") - else() - set(_dpnp_sycl_targets "amdgcn-amd-amdhsa,spir64-unknown-unknown") - endif() + + if (NOT "x${HIP_TARGETS}" STREQUAL "x") + set(_dpnp_amd_targets ${HIP_TARGETS}) + set(_use_onemkl_interfaces_hip ON) + + if ("x${_dpnp_sycl_targets}" STREQUAL "x") + set(_dpnp_sycl_targets "amdgcn-amd-amdhsa,${_dpnp_sycl_targets}") else() - message(FATAL_ERROR "HIP_TARGETS must be specified when using HIP backend") + set(_dpnp_sycl_targets "amdgcn-amd-amdhsa,spir64-unknown-unknown") endif() + elseif (DEFINED HIP_TARGETS AND "x${HIP_TARGETS}" STREQUAL "x") + message(FATAL_ERROR "HIP_TARGETS must be specified when using HIP backend") endif() else() set(_dpnp_sycl_targets ${DPNP_SYCL_TARGETS}) + if (NOT "x${HIP_TARGETS}" STREQUAL "x") set(_dpnp_amd_targets ${HIP_TARGETS}) set(_use_onemkl_interfaces_hip ON) + elseif (DEFINED HIP_TARGETS AND "x${HIP_TARGETS}" STREQUAL "x") + message(FATAL_ERROR "HIP_TARGETS must be specified when using HIP backend") endif() endif() diff --git a/scripts/build_locally.py b/scripts/build_locally.py index c3d5009066cb..934cd11f26d8 100644 --- a/scripts/build_locally.py +++ b/scripts/build_locally.py @@ -39,7 +39,7 @@ def run( verbose=False, cmake_opts="", target="intel", - arch=None, + target_hip=None, onemkl_interfaces=False, onemkl_interfaces_dir=None, ): @@ -105,12 +105,11 @@ def run( # Always builds using oneMKL interfaces for the cuda target onemkl_interfaces = True - if target == "hip": - if not arch: - raise ValueError("--arch is required when --target=hip") + if target_hip is not None: + if target_hip == "default": + raise ValueError("--target-hip requires an architecture") cmake_args += [ - "-DDPNP_TARGET_HIP=ON", - f"-DHIP_TARGETS={arch}", + f"-DHIP_TARGETS={target_hip}", ] # Always builds using oneMKL interfaces for the hip target onemkl_interfaces = True @@ -189,9 +188,10 @@ def run( type=str, ) driver.add_argument( - "--arch", - help="Architecture for HIP target", - dest="arch", + "--target-hip", + required=False, + help="Enable HIP target for build. " + "Must specify HIP architecture (e.g., --target-hip=gfx90a)", type=str, ) driver.add_argument( @@ -261,7 +261,7 @@ def run( verbose=args.verbose, cmake_opts=args.cmake_opts, target=args.target, - arch=args.arch, + target_hip=args.target_hip, onemkl_interfaces=args.onemkl_interfaces, onemkl_interfaces_dir=args.onemkl_interfaces_dir, ) From 5bca5292ea83dfd1e2d9b28d0ca78250b9d799e2 Mon Sep 17 00:00:00 2001 From: Vladislav Perevezentsev Date: Tue, 18 Mar 2025 03:39:58 -0700 Subject: [PATCH 09/15] Add docs for dpnp build on AMD --- doc/quick_start_guide.rst | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/doc/quick_start_guide.rst b/doc/quick_start_guide.rst index 6d586cddc503..84e6992aab69 100644 --- a/doc/quick_start_guide.rst +++ b/doc/quick_start_guide.rst @@ -126,18 +126,36 @@ Building ``dpnp`` for these targets requires that these CodePlay plugins be inst installation layout of compatible version. The following plugins from CodePlay are supported: - `oneAPI for NVIDIA(R) GPUs `_ + - `oneAPI for AMD GPUs `_ .. _codeplay_nv_plugin: https://developer.codeplay.com/products/oneapi/nvidia/ +.. _codeplay_amd_plugin: https://developer.codeplay.com/products/oneapi/amd/ Building ``dpnp`` also requires `building Data Parallel Control Library for custom SYCL targets. `_ -Build ``dpnp`` as follows: +``dpnp`` can be built for CUDA devices as follows: .. code-block:: bash python scripts/build_locally.py --target=cuda +And for AMD devices: + +.. code-block:: bash + + python scripts/build_locally.py --target-hip=gfx90a + +Note that the *oneAPI for AMD GPUs* plugin requires the architecture be specified and only +one architecture can be specified at a time. + +It is, however, possible to build for Intel devices, CUDA devices, and an AMD device +architecture all at once: + +.. code-block:: bash + python scripts/build_locally.py --target=cuda --target-hip=gfx90a + + Testing ======= From b858ae2205daf9faacb64112f0338f79fc4a3924 Mon Sep 17 00:00:00 2001 From: Vladislav Perevezentsev Date: Tue, 18 Mar 2025 03:57:16 -0700 Subject: [PATCH 10/15] Remove unnecessary HIP_TARGETS validation in CMake --- CMakeLists.txt | 4 ---- 1 file changed, 4 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 291e2108a274..bd86fe47423e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -103,8 +103,6 @@ if ("x${DPNP_SYCL_TARGETS}" STREQUAL "x") else() set(_dpnp_sycl_targets "amdgcn-amd-amdhsa,spir64-unknown-unknown") endif() - elseif (DEFINED HIP_TARGETS AND "x${HIP_TARGETS}" STREQUAL "x") - message(FATAL_ERROR "HIP_TARGETS must be specified when using HIP backend") endif() else() set(_dpnp_sycl_targets ${DPNP_SYCL_TARGETS}) @@ -112,8 +110,6 @@ else() if (NOT "x${HIP_TARGETS}" STREQUAL "x") set(_dpnp_amd_targets ${HIP_TARGETS}) set(_use_onemkl_interfaces_hip ON) - elseif (DEFINED HIP_TARGETS AND "x${HIP_TARGETS}" STREQUAL "x") - message(FATAL_ERROR "HIP_TARGETS must be specified when using HIP backend") endif() endif() From 273113e3211d697738b0b3b91416259fdbea2a9d Mon Sep 17 00:00:00 2001 From: Vladislav Perevezentsev Date: Tue, 18 Mar 2025 05:23:57 -0700 Subject: [PATCH 11/15] A small docs update --- doc/quick_start_guide.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/doc/quick_start_guide.rst b/doc/quick_start_guide.rst index 84e6992aab69..fc6d3c702e00 100644 --- a/doc/quick_start_guide.rst +++ b/doc/quick_start_guide.rst @@ -153,6 +153,7 @@ It is, however, possible to build for Intel devices, CUDA devices, and an AMD de architecture all at once: .. code-block:: bash + python scripts/build_locally.py --target=cuda --target-hip=gfx90a From c4da3ef42746fddad5a56b806b68d159e340fd51 Mon Sep 17 00:00:00 2001 From: Vladislav Perevezentsev Date: Wed, 16 Apr 2025 03:31:01 -0700 Subject: [PATCH 12/15] Improve validation of --target and --target-hip --- scripts/build_locally.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/scripts/build_locally.py b/scripts/build_locally.py index 934cd11f26d8..3403f98304eb 100644 --- a/scripts/build_locally.py +++ b/scripts/build_locally.py @@ -98,6 +98,9 @@ def run( if "DPL_ROOT" in os.environ: os.environ["DPL_ROOT_HINT"] = os.environ["DPL_ROOT"] + if not target.strip(): + target = "intel" + if target == "cuda": cmake_args += [ "-DDPNP_TARGET_CUDA=ON", @@ -106,8 +109,10 @@ def run( onemkl_interfaces = True if target_hip is not None: - if target_hip == "default": - raise ValueError("--target-hip requires an architecture") + if not target_hip.strip(): + raise ValueError( + "--target-hip requires an architecture (e.g., gfx90a)" + ) cmake_args += [ f"-DHIP_TARGETS={target_hip}", ] From e6c280e847db8ba747bf1bc64c64251ca5dd2458 Mon Sep 17 00:00:00 2001 From: Vladislav Perevezentsev Date: Wed, 16 Apr 2025 04:29:22 -0700 Subject: [PATCH 13/15] Clarify --target-hip usage in doc --- doc/quick_start_guide.rst | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/doc/quick_start_guide.rst b/doc/quick_start_guide.rst index fc6d3c702e00..c56cad635b76 100644 --- a/doc/quick_start_guide.rst +++ b/doc/quick_start_guide.rst @@ -144,11 +144,26 @@ And for AMD devices: .. code-block:: bash - python scripts/build_locally.py --target-hip=gfx90a + python scripts/build_locally.py --target-hip= Note that the *oneAPI for AMD GPUs* plugin requires the architecture be specified and only one architecture can be specified at a time. +To determine the architecture code (````) for your AMD GPU, run: + +.. code-block:: bash + + rocminfo | grep 'Name: *gfx.*' + +This will print names like ``gfx90a``, ``gfx1030``, etc. +You can then use one of them as the argument to ``--target-hip``. + +For example: + +.. code-block:: bash + python scripts/build_locally.py --target-hip=gfx90a + + It is, however, possible to build for Intel devices, CUDA devices, and an AMD device architecture all at once: From b27a8a12c54371a1290bb26e9e010e3c31f4a886 Mon Sep 17 00:00:00 2001 From: Vladislav Perevezentsev Date: Wed, 16 Apr 2025 09:06:50 -0700 Subject: [PATCH 14/15] Update SYCL target selection logic in CMakeLists --- CMakeLists.txt | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index bd86fe47423e..71ffce1acaf5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -103,13 +103,24 @@ if ("x${DPNP_SYCL_TARGETS}" STREQUAL "x") else() set(_dpnp_sycl_targets "amdgcn-amd-amdhsa,spir64-unknown-unknown") endif() + else() + message(FATAL_ERROR "HIP_TARGETS must be specified when using HIP backend") endif() else() set(_dpnp_sycl_targets ${DPNP_SYCL_TARGETS}) - if (NOT "x${HIP_TARGETS}" STREQUAL "x") - set(_dpnp_amd_targets ${HIP_TARGETS}) + if (DPNP_SYCL_TARGETS MATCHES "nvptx64-nvidia-cuda") + set(_use_onemkl_interfaces_cuda ON) + endif() + + if (DPNP_SYCL_TARGETS MATCHES "amdgcn-amd-amdhsa") set(_use_onemkl_interfaces_hip ON) + + if (NOT "x${HIP_TARGETS}" STREQUAL "x") + set(_dpnp_amd_targets ${HIP_TARGETS}) + else() + message(FATAL_ERROR "HIP_TARGETS must be specified when using HIP backend") + endif() endif() endif() From 5e2cc3d0846bfdea82d88bb3ca8a512a980cc407 Mon Sep 17 00:00:00 2001 From: Vladislav Perevezentsev Date: Thu, 17 Apr 2025 03:50:48 -0700 Subject: [PATCH 15/15] Avoid false HIP error when building for default target --- CMakeLists.txt | 2 -- 1 file changed, 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 71ffce1acaf5..f36ddfe9ceab 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -103,8 +103,6 @@ if ("x${DPNP_SYCL_TARGETS}" STREQUAL "x") else() set(_dpnp_sycl_targets "amdgcn-amd-amdhsa,spir64-unknown-unknown") endif() - else() - message(FATAL_ERROR "HIP_TARGETS must be specified when using HIP backend") endif() else() set(_dpnp_sycl_targets ${DPNP_SYCL_TARGETS})