Add AMD GPU support #540
Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Build | |
on: [push, pull_request] | |
jobs: | |
build-linux-hip-rocm: | |
strategy: | |
# max-parallel: 1 # Sets the limit of jobs to run concurrently | |
fail-fast: true | |
matrix: | |
os: [ubuntu-22.04] | |
compiler: [g++-10] | |
HIP: ['6.2'] | |
runs-on: ${{ matrix.os }} | |
env: | |
HIP_ROOT: '/opt/rocm' | |
steps: | |
- name: Try to clean up some things | |
run: | | |
sudo rm -rf /usr/local/lib/android | |
sudo rm -rf /usr/share/dotnet | |
- name: Setup Node.js | |
uses: actions/setup-node@v4 | |
with: | |
node-version: '20' | |
- name: Checkout repository | |
uses: actions/checkout@v4 | |
with: | |
fetch-depth: '0' | |
- name: Install HIP runtime (if needed) | |
if: matrix.HIP != '0' && matrix.ONEAPI == 0 && matrix.VUDA == 0 | |
run: | | |
case ${{ matrix.HIP }} in | |
6.2) | |
wget https://repo.radeon.com/amdgpu-install/6.2/ubuntu/jammy/amdgpu-install_6.2.60200-1_all.deb | |
sudo apt install ./amdgpu-install_6.2.60200-1_all.deb | |
sudo amdgpu-install -y --usecase=hiplibsdk,rocm --no-dkms | |
;; | |
esac | |
- name: Create build directory | |
run: | | |
mkdir build | |
- name: Run CMake configure (HIP) | |
if: matrix.HIP != '0' && matrix.CUDA == '0' && matrix.ONEAPI == '0' | |
env: | |
CXX: ${{ matrix.compiler }} | |
run: | | |
export CPATH=${HIP_ROOT}/include:${HIP_ROOT} | |
export LD_LIBRARY_PATH=${HIP_ROOT}/lib64:${HIP_ROOT}/lib64/stubs:${LD_LIBRARY_PATH} | |
export LIBRARY_PATH=${HIP_ROOT}/lib64:${HIP_ROOT}/lib64/stubs:${LIBRARY_PATH} | |
export HIP_LIB_PATH=${HIP_ROOT}/lib64:${HIP_ROOT}/lib64/stubs | |
export PATH=${HIP_ROOT}:${PATH} | |
export HIP_HOME=${HIP_ROOT} | |
export HIP_PATH=${HIP_ROOT} | |
export HIPToolkit_ROOT=${HIP_ROOT} | |
cd build | |
cmake -DFIRESTARTER_BUILD_TYPE="FIRESTARTER_HIP" -DCMAKE_EXE_LINKER_FLAGS="-L${HIP_ROOT}/lib64/stubs/" .. | |
- name: Build (default, CUDA, HIP) | |
if: matrix.ONEAPI =='0' | |
run: | | |
cd build | |
make -j2 | |
build-linux: | |
strategy: | |
# max-parallel: 1 # Sets the limit of jobs to run concurrently | |
fail-fast: true | |
matrix: | |
os: [ubuntu-20.04] | |
compiler: [g++-10] | |
CUDA: ['11.0'] | |
runs-on: ${{ matrix.os }} | |
env: | |
CUDA_ROOT: '/usr/local/cuda' | |
#kudos to https://github.com/easimon/maximize-build-space/blob/master/action.yml | |
steps: | |
- name: Try to clean up some things | |
run: | | |
sudo rm -rf /usr/local/lib/android | |
sudo rm -rf /usr/share/dotnet | |
- name: Install g++-7 (if needed) | |
if: matrix.compiler == 'g++-7' | |
run: | | |
sudo apt install g++-7 | |
- name: Install g++-8 (if needed) | |
if: matrix.compiler == 'g++-8' | |
run: | | |
sudo apt install g++-8 | |
- name: Install clang++-8 (if needed) | |
if: matrix.compiler == 'clang++-8' | |
run: | | |
sudo apt install clang-8 | |
- name: Install clang++-9 (if needed) | |
if: matrix.compiler == 'clang++-9' | |
run: | | |
sudo apt install clang-9 | |
- name: Install clang++-10 (if needed) | |
if: matrix.compiler == 'clang++-10' | |
run: | | |
sudo apt install clang-10 | |
- name: Setup Node.js | |
uses: actions/setup-node@v4 | |
with: | |
node-version: '20' | |
- name: Checkout repository | |
uses: actions/checkout@v4 | |
with: | |
fetch-depth: '0' | |
- name: Install CUDA runtime (if needed) | |
if: matrix.CUDA != '0' && matrix.ONEAPI == 0 | |
run: | | |
case ${{ matrix.CUDA }} in | |
8.0) | |
wget https://developer.nvidia.com/compute/cuda/8.0/Prod2/local_installers/cuda_8.0.61_375.26_linux-run | |
wget https://developer.nvidia.com/compute/cuda/8.0/Prod2/patches/2/cuda_8.0.61.2_linux-run | |
sudo sh cuda_8.0.61_375.26_linux-run --extract=${CUDA_ROOT} | |
sudo sh ${CUDA_ROOT}/cuda-linux64-rel-8.0.61-21551265.run --tar mxvf -C ${CUDA_ROOT} | |
sudo sh cuda_8.0.61.2_linux-run --accept-eula --silent --installdir=${CUDA_ROOT} | |
rm cuda_8.0.61_375.26_linux-run | |
rm cuda_8.0.61.2_linux-run | |
;; | |
11.0) | |
wget https://developer.download.nvidia.com/compute/cuda/11.0.3/local_installers/cuda_11.0.3_450.51.06_linux.run | |
sudo sh cuda_11.0.3_450.51.06_linux.run --toolkit --toolkitpath=${CUDA_ROOT} --override --silent | |
rm cuda_11.0.3_450.51.06_linux.run | |
;; | |
NVHPC-22.5) | |
wget https://developer.download.nvidia.com/hpc-sdk/22.5/nvhpc_2022_225_Linux_x86_64_cuda_11.7.tar.gz | |
tar xpzf nvhpc_2022_225_Linux_x86_64_cuda_11.7.tar.gz | |
rm nvhpc_2022_225_Linux_x86_64_cuda_11.7.tar.gz | |
sudo NVHPC_SILENT="true" NVHPC_INSTALL_DIR="$CUDA_ROOT" NVHPC_INSTALL_TYPE="single" ./nvhpc_2022_225_Linux_x86_64_cuda_11.7/install | |
rm -rf nvhpc_2022_225_Linux_x86_64_cuda_11.7 | |
esac | |
- name: Install OneAPI Base-Toolkit (if needed) | |
if: matrix.ONEAPI != '0' && matrix.CUDA == '0' | |
run: | | |
wget -O- https://apt.repos.intel.com/intel-gpg-keys/GPG-PUB-KEY-INTEL-SW-PRODUCTS.PUB | gpg --dearmor | sudo tee /usr/share/keyrings/oneapi-archive-keyring.gpg > /dev/null | |
echo "deb [signed-by=/usr/share/keyrings/oneapi-archive-keyring.gpg] https://apt.repos.intel.com/oneapi all main" | sudo tee /etc/apt/sources.list.d/oneAPI.list | |
sudo apt update | |
sudo apt install intel-basekit-${{ matrix.ONEAPI }} | |
- name: Create build directory | |
run: | | |
mkdir build | |
- name: Run CMake configure (default) | |
if: matrix.CUDA == '0' && matrix.ONEAPI == '0' | |
env: | |
CXX: ${{ matrix.compiler }} | |
run: | | |
cd build | |
cmake .. | |
- name: Run CMake configure (CUDA) | |
if: matrix.CUDA != '0' && matrix.CUDA != 'NVHPC-22.5' && matrix.ONEAPI == '0' | |
env: | |
CXX: ${{ matrix.compiler }} | |
run: | | |
export CPATH=${CUDA_ROOT}/include:${CPATH} | |
export LD_LIBRARY_PATH=${CUDA_ROOT}/lib64:${CUDA_ROOT}/lib64/stubs:${LD_LIBRARY_PATH} | |
export LIBRARY_PATH=${CUDA_ROOT}/lib64:${CUDA_ROOT}/lib64/stubs:${LIBRARY_PATH} | |
export CUDA_LIB_PATH=${CUDA_ROOT}/lib64:${CUDA_ROOT}/lib64/stubs | |
export PATH=${CUDA_ROOT}:${PATH} | |
export CUDA_HOME=${CUDA_ROOT} | |
export CUDA_PATH=${CUDA_ROOT} | |
export CUDAToolkit_ROOT=${CUDA_ROOT} | |
cd build | |
cmake -DFIRESTARTER_BUILD_TYPE="FIRESTARTER_CUDA" -DCMAKE_EXE_LINKER_FLAGS="-L${CUDA_ROOT}/lib64/stubs/" .. | |
- name: Run CMake configure (CUDA with NVHPC) | |
if: matrix.CUDA == 'NVHPC-22.5' && matrix.ONEAPI == '0' | |
env: | |
CXX: ${{ matrix.compiler }} | |
run: | | |
NVARCH=`uname -s`_`uname -m`; export NVARCH | |
PATH=$CUDA_ROOT/$NVARCH/22.5/compilers/bin:$PATH; export PATH | |
LD_LIBRARY_PATH=$CUDA_ROOT/$NVARCH/22.5/compilers/lib:$LD_LIBRARY_PATH; export LD_LIBRARY_PATH | |
LD_LIBRARY_PATH=$CUDA_ROOT/$NVARCH/22.5/cuda/11.7/lib64:$LD_LIBRARY_PATH; export LD_LIBRARY_PATH | |
LD_LIBRARY_PATH=$CUDA_ROOT/$NVARCH/22.5/cuda/11.7/lib64/stubs:$LD_LIBRARY_PATH; export LD_LIBRARY_PATH | |
cd build | |
cmake -DFIRESTARTER_BUILD_TYPE="FIRESTARTER_CUDA" -DCMAKE_EXE_LINKER_FLAGS=-L"$CUDA_ROOT/$NVARCH/22.5/cuda/11.7/lib64/stubs" -LA .. | |
- name: Run CMake configure (OneAPI 2023.2.0) | |
if: matrix.CUDA == '0' && matrix.ONEAPI =='2023.2.0' | |
run: | | |
. /opt/intel/oneapi/setvars.sh | |
cd build | |
cmake -DFIRESTARTER_BUILD_TYPE="FIRESTARTER_ONEAPI" .. | |
- name: Run CMake configure (OneAPI 2024.0) | |
if: matrix.CUDA == '0' && matrix.ONEAPI =='2024.0' | |
run: | | |
. /opt/intel/oneapi/${{ matrix.ONEAPI }}/oneapi-vars.sh | |
cd build | |
cmake -DFIRESTARTER_BUILD_TYPE="FIRESTARTER_ONEAPI" .. | |
- name: Build (default, CUDA) | |
if: matrix.ONEAPI =='0' | |
run: | | |
cd build | |
make -j2 | |
- name: Build (OneAPI 2023.2.0) | |
if: matrix.CUDA == '0' && matrix.ONEAPI =='2023.2.0' | |
run: | | |
. /opt/intel/oneapi/setvars.sh | |
cd build | |
make -j2 | |
- name: Build (OneAPI 2024.0) | |
if: matrix.CUDA == '0' && matrix.ONEAPI =='2024.0' | |
run: | | |
. /opt/intel/oneapi/${{ matrix.ONEAPI }}/oneapi-vars.sh | |
cd build | |
make -j2 | |
- name: Strip binary (default) | |
if: matrix.CUDA == '0' && matrix.ONEAPI == '0' | |
run: | | |
cd build | |
strip src/FIRESTARTER | |
- name: Strip binary (CUDA) | |
if: matrix.CUDA != '0' && matrix.ONEAPI == '0' | |
run: | | |
cd build | |
strip src/FIRESTARTER_CUDA | |
- name: Strip binary (OneAPI) | |
if: matrix.ONEAPI != '0' && matrix.CUDA == '0' | |
run: | | |
cd build | |
strip src/FIRESTARTER_ONEAPI | |
- name: Test FIRESTARTER (default) | |
if: matrix.CUDA == '0' && matrix.ONEAPI == '0' | |
run: ./build/src/FIRESTARTER -t 1 | |
- uses: actions/upload-artifact@v4 | |
if: matrix.compiler == 'clang++-10' && matrix.CUDA == '0' && matrix.ONEAPI == '0' && ( github.event_name == 'push' && startsWith(github.ref, 'refs/tags/') || github.event_name == 'pull_request' ) | |
with: | |
name: FIRESTARTER-linux | |
retention-days: 1 | |
path: build/src/FIRESTARTER | |
- uses: actions/upload-artifact@v4 | |
if: matrix.compiler == 'clang++-10' && matrix.CUDA != '0' && matrix.ONEAPI == '0' && ( github.event_name == 'push' && startsWith(github.ref, 'refs/tags/') || github.event_name == 'pull_request' ) | |
with: | |
name: FIRESTARTER_CUDA_${{ matrix.CUDA }}-linux | |
retention-days: 1 | |
path: build/src/FIRESTARTER_CUDA | |
- uses: actions/upload-artifact@v4 | |
if: matrix.compiler == 'clang++-10' && matrix.CUDA == '0' && matrix.ONEAPI != '0' && ( github.event_name == 'push' && startsWith(github.ref, 'refs/tags/') || github.event_name == 'pull_request' ) | |
with: | |
name: FIRESTARTER_ONEAPI_${{ matrix.ONEAPI }}-linux | |
retention-days: 1 | |
path: build/src/FIRESTARTER_ONEAPI | |
- name: UnInstall g++-7 (if needed) | |
if: matrix.compiler == 'g++-7' | |
run: | | |
sudo apt remove g++-7 | |
sudo apt autoremove | |
- name: UnInstall g++-8 (if needed) | |
if: matrix.compiler == 'g++-8' | |
run: | | |
sudo apt remove g++-8 | |
sudo apt autoremove | |
- name: UnInstall clang++-8 (if needed) | |
if: matrix.compiler == 'clang++-8' | |
run: | | |
sudo apt remove clang-8 | |
sudo apt autoremove | |
- name: UnInstall clang++-9 (if needed) | |
if: matrix.compiler == 'clang++-9' | |
run: | | |
sudo apt remove clang-9 | |
sudo apt autoremove | |
- name: UnInstall clang++-10 (if needed) | |
if: matrix.compiler == 'clang++-10' | |
run: | | |
sudo apt remove clang-10 | |
sudo apt autoremove | |
- name: UnInstall CUDA runtime (if needed) | |
if: matrix.CUDA != '0' && matrix.ONEAPI == '0' | |
run: | | |
sudo rm -rf ${CUDA_ROOT} | |
- name: UnInstall OneAPI Base-Toolkit (if needed) | |
if: matrix.ONEAPI != '0' && matrix.CUDA == '0' | |
run: | | |
sudo apt remove intel-basekit-${{ matrix.ONEAPI }} | |
sudo apt autoremove |