Skip to content

Commit 79142ca

Browse files
authored
Add NVIDIA and AMD targets in CI builds (#13)
1 parent f811144 commit 79142ca

File tree

3 files changed

+44
-16
lines changed

3 files changed

+44
-16
lines changed

.github/workflows/ci.yml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,9 @@ jobs:
102102
-DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}}
103103
-DCMAKE_CXX_COMPILER=clang++
104104
-DENABLE_GRAPHICS=ON
105-
-DENABLE_SPIR=ON -DENABLE_CUDA=OFF -DENABLE_HIP=OFF
105+
-DENABLE_SPIR=ON
106+
-DENABLE_CUDA=ON -DCUDA_COMPUTE_CAPABILITY=80
107+
-DENABLE_HIP=ON -DHIP_GFX_ARCH=gfx90a
106108
-DCMAKE_CXX_FLAGS='-Wall -Wextra -Wpedantic -Werror'
107109
-G Ninja
108110

ci/Dockerfile

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,27 @@ RUN apt update && apt -y install wget gpg git cmake ninja-build \
55
gcc-12 libstdc++-12-dev libsdl2-dev \
66
&& apt clean
77

8-
# Install Intel oneAPI repositories
8+
# Install nvcc (dependency for compiling for a CUDA target)
9+
ARG CUDA_VERSION=12-4
10+
RUN wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-keyring_1.0-1_all.deb \
11+
&& dpkg -i cuda-keyring_1.0-1_all.deb && rm cuda-keyring_1.0-1_all.deb \
12+
&& apt update && apt -y install cuda-nvcc-${CUDA_VERSION} && apt clean
13+
14+
# Install ROCm device libs (dependency for compiling for a HIP target)
15+
ARG ROCM_VERSION=5.4.3
16+
RUN wget https://repo.radeon.com/rocm/rocm.gpg.key -O - \
17+
| gpg --dearmor | tee /etc/apt/keyrings/rocm.gpg > /dev/null \
18+
&& echo "deb [arch=amd64 signed-by=/etc/apt/keyrings/rocm.gpg] https://repo.radeon.com/rocm/apt/${ROCM_VERSION} jammy main" \
19+
| tee /etc/apt/sources.list.d/rocm.list \
20+
&& apt update && apt -y install rocm-device-libs && apt clean
21+
22+
# Install DPC++ and remove parts we don't need to reduce the container size
23+
ARG ONEAPI_VERSION=2024.1
924
RUN wget -O- https://apt.repos.intel.com/intel-gpg-keys/GPG-PUB-KEY-INTEL-SW-PRODUCTS.PUB \
1025
| gpg --dearmor | tee /usr/share/keyrings/oneapi-archive-keyring.gpg > /dev/null \
1126
&& echo "deb [signed-by=/usr/share/keyrings/oneapi-archive-keyring.gpg] https://apt.repos.intel.com/oneapi all main" \
12-
| tee /etc/apt/sources.list.d/oneAPI.list
13-
14-
# Install DPC++ and remove parts we don't need to reduce the container size
15-
RUN apt update && apt -y install intel-oneapi-compiler-dpcpp-cpp-2024.0 \
27+
| tee /etc/apt/sources.list.d/oneAPI.list \
28+
&& apt update && apt -y install intel-oneapi-compiler-dpcpp-cpp-${ONEAPI_VERSION} \
1629
&& apt clean \
1730
&& cd /opt/intel/oneapi \
1831
&& rm -rf conda_channel debugger dev-utilities dpl compiler/latest/linux/lib/oclfpga
@@ -24,6 +37,7 @@ ENV PATH=${CMPLR_ROOT}/bin:${CMPLR_ROOT}/bin/compiler:${PATH}
2437
ENV CPATH=${CMPLR_ROOT}/include:${CPATH}
2538
ENV LIBRARY_PATH=${CMPLR_ROOT}/lib:${LIBRARY_PATH}
2639
ENV LD_LIBRARY_PATH=${CMPLR_ROOT}/lib:${LD_LIBRARY_PATH}
40+
ENV HIP_DEVICE_LIB_PATH=/usr/lib/x86_64-linux-gnu/amdgcn/bitcode
2741

2842
# Set up entry point
2943
ENTRYPOINT []

cmake/ConfigureSYCL.cmake

Lines changed: 22 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -42,12 +42,18 @@ set(SYCL_TARGETS "")
4242
if(${ENABLE_CUDA})
4343
string(JOIN "," SYCL_TARGETS "${SYCL_TARGETS}" "nvptx64-nvidia-cuda")
4444
set(DEFAULT_CUDA_COMPUTE_CAPABILITY "50")
45-
execute_process(
46-
COMMAND bash -c "which nvidia-smi >/dev/null && nvidia-smi --query-gpu=compute_cap --format=csv,noheader | head -n 1 | tr -d '.'"
47-
OUTPUT_VARIABLE CUDA_COMPUTE_CAPABILITY
48-
OUTPUT_STRIP_TRAILING_WHITESPACE)
45+
set(CUDA_COMPUTE_CAPABILITY "" CACHE BOOL
46+
"CUDA architecture (compute capability), e.g. sm_80. Default value is auto-configured using nvidia-smi.")
47+
# Auto-configure if not specified by user
4948
if ("${CUDA_COMPUTE_CAPABILITY}" STREQUAL "")
50-
message(WARNING "Failed to autoconfigure CUDA Compute Capability using nvidia-smi. Will default to sm_${DEFAULT_CUDA_COMPUTE_CAPABILITY}")
49+
execute_process(
50+
COMMAND bash -c "which nvidia-smi >/dev/null && nvidia-smi --query-gpu=compute_cap --format=csv,noheader | head -n 1 | tr -d '.'"
51+
OUTPUT_VARIABLE CUDA_COMPUTE_CAPABILITY
52+
OUTPUT_STRIP_TRAILING_WHITESPACE)
53+
endif()
54+
# Warn if not specified and failed to auto-configure
55+
if ("${CUDA_COMPUTE_CAPABILITY}" STREQUAL "")
56+
message(WARNING "Failed to autoconfigure CUDA_COMPUTE_CAPABILITY using nvidia-smi. Will default to sm_${DEFAULT_CUDA_COMPUTE_CAPABILITY}")
5157
set(CUDA_COMPUTE_CAPABILITY ${DEFAULT_CUDA_COMPUTE_CAPABILITY} CACHE STRING "CUDA Compute Capability")
5258
else()
5359
message(STATUS "Enabled SYCL target CUDA with Compute Capability sm_${CUDA_COMPUTE_CAPABILITY}")
@@ -60,12 +66,18 @@ endif()
6066
if(${ENABLE_HIP})
6167
string(JOIN "," SYCL_TARGETS "${SYCL_TARGETS}" "amdgcn-amd-amdhsa")
6268
set(DEFAULT_HIP_GFX_ARCH "gfx906")
63-
execute_process(
64-
COMMAND bash -c "which rocminfo >/dev/null && rocminfo | grep -o 'gfx[0-9]*' | head -n 1"
65-
OUTPUT_VARIABLE HIP_GFX_ARCH
66-
OUTPUT_STRIP_TRAILING_WHITESPACE)
69+
set(HIP_GFX_ARCH "" CACHE BOOL
70+
"HIP architecture tag, e.g. gfx90a. Default value is auto-configured using rocminfo.")
71+
# Auto-configure if not specified by user
72+
if ("${CUDA_COMPUTE_CAPABILITY}" STREQUAL "")
73+
execute_process(
74+
COMMAND bash -c "which rocminfo >/dev/null && rocminfo | grep -o 'gfx[0-9]*' | head -n 1"
75+
OUTPUT_VARIABLE HIP_GFX_ARCH
76+
OUTPUT_STRIP_TRAILING_WHITESPACE)
77+
endif()
78+
# Warn if not specified and failed to auto-configure
6779
if ("${HIP_GFX_ARCH}" STREQUAL "")
68-
message(WARNING "Failed to autoconfigure HIP gfx arch using rocminfo. Will default to ${DEFAULT_HIP_GFX_ARCH}")
80+
message(WARNING "Failed to autoconfigure HIP_GFX_ARCH using rocminfo. Will default to ${DEFAULT_HIP_GFX_ARCH}")
6981
set(HIP_GFX_ARCH ${DEFAULT_HIP_GFX_ARCH} CACHE STRING "HIP gfx arch")
7082
else()
7183
message(STATUS "Enabled SYCL target HIP with gfx arch ${HIP_GFX_ARCH}")

0 commit comments

Comments
 (0)