Bug#1031808: clang-15: clang does not search debian paths for rocm
Cordell Bloor
cgmb at slerp.xyz
Thu Feb 23 06:37:25 GMT 2023
Package: clang-15
Version: 1:15.0.7-1
Severity: normal
X-Debbugs-Cc: cgmb at slerp.xyz, debian-ai at lists.debian.org
Dear Maintainer,
Clang does not search the system paths when looking for the ROCm
components that it requires for building HIP langauge code. Consider the
following sample program:
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;
}
It should be possible to build this sample program using the commands:
apt install hipcc
clang++-15 -x hip -lamdhip64 main.hip
At present, however, that will result in the following error messages:
clang: error: cannot find ROCm device library; provide its path via '--rocm-path' or '--rocm-device-lib-path', or pass '-nogpulib' to build without ROCm device library
clang: error: cannot find HIP runtime; provide its path via '--rocm-path', or pass '-nogpuinc' to build without HIP runtime
clang: error: cannot find HIP runtime; provide its path via '--rocm-path', or pass '-nogpuinc' to build without HIP runtime
The errors can be resolved with a few additional flags:
clang++-15 -x hip --rocm-path=/usr \
--rocm-device-lib-path=/usr/lib/x86_64-linux-gnu/amdgcn/bitcode \
--hip-version=5.2.21153 \
-lamdhip64 main.hip
However, this should not be necessary. The first step should be to
backport the upstream HIP detection for Debian and Fedora [1]. That will
solve 2/3rds of this problem by eliminating the need to pass --rocm-path
and --hip-version.
It's less clear what should be done about the ROCm Device Lib path. The
upstream LLVM project searches for the ROCm device libs at
/usr/lib/llvm-15/lib/clang/15.0.7/lib/amdgcn/bitcode [2], which seems
like the ideal place to put them. However, placing the device libs in a
path that contains the LLVM version number would require a lot of
coordination between packages.
My understanding is that the bitcode files are LLVM IR and newer
versions of LLVM can use bitcode files that were compiled with older
versions of LLVM [3], so it should be fine to leave the bitcode files in
an unversioned path like /usr/lib/$(DEB_HOST_MULTIARCH)/amdgcn/bitcode
and still not have to worry about what happens when LLVM is updated.
After considering these trade-offs, my conclusion is that
/usr/lib/$(DEB_HOST_MULTIARCH)/amdgcn/bitcode should be added to the
search paths for the ROCm device libs.
Sincerely,
Cory Bloor
[1]: https://github.com/llvm/llvm-project/commit/082593ff7aff68060bd66dccfa43493d07d9c255
[2]: https://github.com/llvm/llvm-project/blob/419948fe6708021524f86e15d755719d634ab8d2/clang/lib/Driver/ToolChains/AMDGPU.cpp#L416
[3]: https://llvm.org/docs/DeveloperPolicy.html#ir-backwards-compatibility
-- 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
Versions of packages clang-15 depends on:
ii binutils 2.40-2
ii libc6 2.36-8
ii libc6-dev 2.36-8
ii libclang-common-15-dev 1:15.0.7-1
ii libclang-cpp15 1:15.0.7-1
ii libclang1-15 1:15.0.7-1
ii libgcc-12-dev 12.2.0-14
ii libgcc-s1 12.2.0-14
ii libllvm15 1:15.0.7-1
ii libobjc-12-dev 12.2.0-14
ii libstdc++-12-dev 12.2.0-14
ii libstdc++6 12.2.0-14
ii llvm-15-linker-tools 1:15.0.7-1
Versions of packages clang-15 recommends:
ii llvm-15-dev 1:15.0.7-1
ii python3 3.11.2-1
Versions of packages clang-15 suggests:
pn clang-15-doc <none>
pn wasi-libc <none>
-- no debconf information
More information about the Pkg-llvm-team
mailing list