[Pkg-cmake-team] Bug#1031799: cmake-data: cmake does not search multiarch paths for HIP

Cordell Bloor cgmb at slerp.xyz
Wed Feb 22 22:34:33 GMT 2023


Package: cmake-data
Version: 3.25.1-1
Severity: normal
X-Debbugs-Cc: cgmb at slerp.xyz, debian-ai at lists.debian.org

Dear Maintainer,

It is not possible to use CMake's HIP language support together with
the Debian package for HIP. Consider this sample project:

CMakeLists.txt:

    cmake_minimum_required(VERSION 3.22)
    project(example LANGUAGES HIP)
    add_executable(ex main.hip)

main.hip:

    #include <stdio.h>
    #include <stdlib.h>
    #include <hip/hip_runtime.h>
    
    #define CHECK_HIP(expr) do {              \
      hipError_t result = (expr);             \
      if (result != hipSuccess) {             \
        fprintf(stderr, "%s:%d: %s (%d)\n",   \
          __FILE__, __LINE__,                 \
          hipGetErrorString(result), result); \
        exit(EXIT_FAILURE);                   \
      }                                       \
    } while(0)
    
    __global__ void sq_arr(float *arr, int n) {
      int tid = blockDim.x*blockIdx.x + threadIdx.x;
      if (tid < n) {
        arr[tid] = arr[tid] * arr[tid];
      }
    }
    
    int main() {
      enum { N = 5 };
      float hArr[N] = { 1, 2, 3, 4, 5 };
      float *dArr;
      CHECK_HIP(hipMalloc(&dArr, sizeof(float) * N));
      CHECK_HIP(hipMemcpy(dArr, hArr, sizeof(float) * N, hipMemcpyHostToDevice));
      sq_arr<<<dim3(1), dim3(32,1,1), 0, 0>>>(dArr, N);
      CHECK_HIP(hipMemcpy(hArr, dArr, sizeof(float) * N, hipMemcpyDeviceToHost));
      for (int i = 0; i < N; ++i) {
        printf("%f\n", hArr[i]);
      }
      CHECK_HIP(hipFree(dArr));
      return 0;
    }

Build log:

    # apt install hipcc cmake
    # HIPFLAGS="--rocm-path=/usr --rocm-device-lib-path=/usr/lib/x86_64-linux-gnu/amdgcn/bitcode" \
        HIPCXX=clang++-15 cmake -S. -Bbuild --debug-output \
        -DCMAKE_LIBRARY_ARCHITECTURE=x86_64-linux-gnu
    Running with debug output on.
    -- The HIP compiler identification is Clang 15.0.7
       Called from: [3]     /usr/share/cmake-3.25/Modules/CMakeDetermineCompilerId.cmake
                    [2]     /usr/share/cmake-3.25/Modules/CMakeDetermineHIPCompiler.cmake
                    [1]     /root/CMakeLists.txt
    CMake Error at /usr/share/cmake-3.25/Modules/CMakeDetermineHIPCompiler.cmake:106 (message):
      The ROCm root directory:
    
       /usr
    
      does not contain the HIP runtime CMake package, expected at:
    
       /usr/lib/cmake/hip-lang/hip-lang-config.cmake
    
    Call Stack (most recent call first):
      CMakeLists.txt:2 (project)
    
    
       Called from: [2]     /usr/share/cmake-3.25/Modules/CMakeDetermineHIPCompiler.cmake
                    [1]     /root/CMakeLists.txt
    -- Configuring incomplete, errors occurred!

This error is because when provided as part of the libamdhip64-dev
package, the HIP runtime CMake package is installed to
/usr/lib/$(DEB_HOST_MULTIARCH)/cmake/hip-lang/hip-lang-config.cmake
CMake should probably check both locations to ensure compatibility with
the layout of both the upstream ROCm project and the Debian HIP package.

In total, this path appears in three places:

/usr/share/cmake-3.25/Modules/CMakeDetermineHIPCompiler.cmake:105
/usr/share/cmake-3.25/Modules/CMakeDetermineHIPCompiler.cmake:110
/usr/share/cmake-3.25/Modules/CMakeHIPInformation.cmake:145

Sincerely,
Cory Bloor

-- System Information:
Debian Release: bookworm/sid
  APT prefers unstable
  APT policy: (500, 'unstable')
Architecture: amd64 (x86_64)

Kernel: Linux 6.1.0-3-amd64 (SMP w/32 CPU threads; PREEMPT)
Locale: LANG=C, LC_CTYPE=C.UTF-8 (charmap=UTF-8), LANGUAGE not set
Shell: /bin/sh linked to /usr/bin/dash
Init: unable to detect

-- no debconf information



More information about the Pkg-cmake-team mailing list