Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

added container to build traccc/SYCL for AMD GPU backend on Alma9 #126

Merged
merged 4 commits into from
Nov 12, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .github/workflows/build-images.yml
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ jobs:
- ubuntu2404_rocm_oneapi
- ubuntu2404_oneapi
- alma9-base
- alma9_rocm_oneapi
- alma9_cuda_oneapi
steps:
- uses: actions/checkout@v4
Expand Down
48 changes: 48 additions & 0 deletions alma9_rocm_oneapi/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
# Docker machinery, part of the ACTS project
#
# (c) 2024 CERN for the benefit of the ACTS project
#
# Mozilla Public License Version 2.0

FROM cern/alma9-base:latest

LABEL description="CERN AlmaLinux 9 with Acts dependencies and ROCm/HIP + oneAPI"
LABEL version="1"

RUN dnf install -y https://linuxsoft.cern.ch/wlcg/el9/x86_64/HEP_OSlibs-9.1.0-2.el9.x86_64.rpm \
&& dnf -y clean all

# Set up gcc 13.
RUN dnf install -y gcc-toolset-13

# Install boost development package
RUN dnf install -y boost boost-devel

# Set up the ROCm repository.
COPY rocm.repo /etc/yum.repos.d/rocm.repo
ARG ROCM_VERSION=6.1.0

# Install ROCm/HIP: latest version supported by the CodePlay plugin
RUN dnf install -y rocm-hip-runtime-devel
ENV HIP_PLATFORM=amd

# Set up the oneAPI repository.
COPY oneapi.repo /etc/yum.repos.d/oneapi.repo

# Install oneAPI.
ARG ONEAPI_VERSION=2024.2
RUN dnf install -y intel-oneapi-compiler-dpcpp-cpp-${ONEAPI_VERSION}

# Install the CodePlay AMD plugin on top of oneAPI.
RUN ONEAPI_INSTALLED_VERSION=$(/opt/intel/oneapi/compiler/latest/bin/icpx --version | grep -oP '(?<=Intel\(R\) oneAPI DPC\+\+\/C\+\+ Compiler )[[:digit:]]+\.[[:digit:]]+\.[[:digit:]]+') && \
echo "Installing CodePlay for OneAPI ${ONEAPI_INSTALLED_VERSION}" && \
curl -SL "https://developer.codeplay.com/api/v1/products/download?product=oneapi&variant=amd&version=${ONEAPI_INSTALLED_VERSION}&filters[]=${ROCM_VERSION}&filters[]=linux" \
-o plugin.sh && \
sh plugin.sh --install-dir /opt/intel/oneapi --yes && \
rm plugin.sh

# By default the environment with ROCm, OneAPI SYCL compiler, and AMD backend plugin is loaded
ADD --chmod=700 setenv.sh /
# Make sure it's executable
RUN chmod +x /setenv.sh
ENTRYPOINT /setenv.sh
7 changes: 7 additions & 0 deletions alma9_rocm_oneapi/oneapi.repo
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
[oneAPI]
name=Intel oneAPI repository
baseurl=https://yum.repos.intel.com/oneapi
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://yum.repos.intel.com/intel-gpg-keys/GPG-PUB-KEY-INTEL-SW-PRODUCTS.PUB
7 changes: 7 additions & 0 deletions alma9_rocm_oneapi/rocm.repo
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
[ROCm-6.1.0]
name=ROCm6.1.0
baseurl=https://repo.radeon.com/rocm/el9/6.1/main
enabled=1
priority=50
gpgcheck=1
gpgkey=https://repo.radeon.com/rocm/rocm.gpg.key
30 changes: 30 additions & 0 deletions alma9_rocm_oneapi/setenv.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
#!/usr/bin/env bash
GCCDIR=/opt/rh/gcc-toolset-13/root

# Set up gcc 13.
source ${GCCDIR}/../enable
# Set up SYCL compiler, including AMD backend.
source /opt/intel/oneapi/setvars.sh --include-intel-llvm

# Set up the compilers to use (with CMake).
export CC="`which clang` --gcc-toolchain=${GCCDIR}"
export CXX="`which clang++` --gcc-toolchain=${GCCDIR}"

# Set up the compiler and its options for SYCL
# gfx90a is the GPU at RAL
export SYCLCXX="${CXX} -fsycl"
export SYCLFLAGS="-fsycl-targets=amd_gpu_gfx90a -Xclang -opaque-pointers"

# HIP_VISIBLE_DEVICES=all does not work
export HIP_VISIBLE_DEVICES=0,1

# Clean
unset GCCDIR

# For user's convenience:
export TRACCC_URL="https://github.com/acts-project/traccc"
echo "git clone $TRACCC_URL"
echo "cmake -S . -B buildamd -DTRACCC_BUILD_SYCL=ON -DTRACCC_USE_ROOT=OFF -DCMAKE_INSTALL_PREFIX:PATH=./installed"
echo "cmake --build buildamd --target install"

bash