From 3f5acf37edc16dda542a716aa3d85ca0304dd823 Mon Sep 17 00:00:00 2001 From: Benjamin Worpitz Date: Thu, 21 Nov 2019 17:41:52 +0100 Subject: [PATCH] Add support for CUDA 10.2 --- .travis.yml | 37 ++++++++++++++++++++++++- README.md | 4 +-- alpakaConfig.cmake | 22 +++++++++------ script/travis/install_cuda.sh | 13 +++++++-- test/CMakeLists.txt | 9 ++++-- test/unit/CMakeLists.txt | 2 -- test/unit/queue/src/CollectiveQueue.cpp | 2 +- 7 files changed, 71 insertions(+), 18 deletions(-) diff --git a/.travis.yml b/.travis.yml index cdcc3a582cf4..e3e3ffcf5d44 100644 --- a/.travis.yml +++ b/.travis.yml @@ -43,7 +43,7 @@ services: # ALPAKA_ACC_CPU_BT_OMP4_ENABLE : {ON, OFF} # [ON] OMP_NUM_THREADS : {1, 2, 3, 4} # ALPAKA_ACC_GPU_CUDA_ENABLE : {ON, OFF} -# [ON] ALPAKA_CUDA_VERSION : {8.0, 9.0, 9.1, 9.2, 10.0, 10.1} +# [ON] ALPAKA_CUDA_VERSION : {8.0, 9.0, 9.1, 9.2, 10.0, 10.1, 10.2} # [ON] ALPAKA_CUDA_COMPILER : {nvcc, [CXX==clang++]:clang} # ALPAKA_ACC_CPU_B_TBB_T_SEQ_ENABLE : {ON, OFF} # ALPAKA_ACC_GPU_HIP_ENABLE : {ON, OFF} @@ -318,6 +318,41 @@ matrix: - name: clang-9 + CUDA-10.1 Debug env: ALPAKA_CI_DOCKER_BASE_IMAGE_NAME=ubuntu:16.04 CXX=clang++ CC=clang ALPAKA_CI_CLANG_VER=9.0.0 CMAKE_BUILD_TYPE=Debug ALPAKA_CI_STDLIB=libstdc++ ALPAKA_CI_BOOST_BRANCH=boost-1.67.0 ALPAKA_CI_CMAKE_VER=3.14.4 ALPAKA_ACC_GPU_CUDA_ENABLE=ON ALPAKA_CUDA_VERSION=10.1 ALPAKA_CUDA_COMPILER=clang + ## CUDA 10.2 + # nvcc + g++ + - name: nvcc-10.2 + gcc-4.9 Release + env: ALPAKA_CI_DOCKER_BASE_IMAGE_NAME=ubuntu:14.04 CXX=g++ CC=gcc ALPAKA_CI_GCC_VER=4.9 CMAKE_BUILD_TYPE=Release ALPAKA_CI_STDLIB=libstdc++ ALPAKA_CI_BOOST_BRANCH=boost-1.71.0 ALPAKA_CI_CMAKE_VER=3.11.4 ALPAKA_ACC_GPU_CUDA_ENABLE=ON ALPAKA_CUDA_VERSION=10.2 ALPAKA_CUDA_COMPILER=nvcc ALPAKA_CUDA_ARCH="30;75" + - name: nvcc-10.2 + gcc-5 Debug + env: ALPAKA_CI_DOCKER_BASE_IMAGE_NAME=ubuntu:16.04 CXX=g++ CC=gcc ALPAKA_CI_GCC_VER=5 CMAKE_BUILD_TYPE=Debug ALPAKA_CI_STDLIB=libstdc++ ALPAKA_CI_BOOST_BRANCH=boost-1.68.0 ALPAKA_CI_CMAKE_VER=3.12.4 ALPAKA_ACC_GPU_CUDA_ENABLE=ON ALPAKA_CUDA_VERSION=10.2 ALPAKA_CUDA_COMPILER=nvcc ALPAKA_CUDA_ARCH="30;35" + - name: nvcc-10.2 + gcc-6 Release + env: ALPAKA_CI_DOCKER_BASE_IMAGE_NAME=ubuntu:14.04 CXX=g++ CC=gcc ALPAKA_CI_GCC_VER=6 CMAKE_BUILD_TYPE=Release ALPAKA_CI_STDLIB=libstdc++ ALPAKA_CI_BOOST_BRANCH=boost-1.65.1 ALPAKA_CI_CMAKE_VER=3.15.2 ALPAKA_ACC_GPU_CUDA_ENABLE=ON ALPAKA_CUDA_VERSION=10.2 ALPAKA_CUDA_COMPILER=nvcc + - name: nvcc-10.2 + gcc-7 Debug + env: ALPAKA_CI_DOCKER_BASE_IMAGE_NAME=ubuntu:18.04 CXX=g++ CC=gcc ALPAKA_CI_GCC_VER=7 CMAKE_BUILD_TYPE=Debug ALPAKA_CI_STDLIB=libstdc++ ALPAKA_CI_BOOST_BRANCH=boost-1.67.0 ALPAKA_CI_CMAKE_VER=3.11.4 ALPAKA_ACC_GPU_CUDA_ENABLE=ON ALPAKA_CUDA_VERSION=10.2 ALPAKA_CUDA_COMPILER=nvcc + - name: nvcc-10.2 + gcc-8 Release + env: ALPAKA_CI_DOCKER_BASE_IMAGE_NAME=ubuntu:18.04 CXX=g++ CC=gcc ALPAKA_CI_GCC_VER=8 CMAKE_BUILD_TYPE=Release ALPAKA_CI_STDLIB=libstdc++ ALPAKA_CI_BOOST_BRANCH=boost-1.69.0 ALPAKA_CI_CMAKE_VER=3.13.5 ALPAKA_ACC_GPU_CUDA_ENABLE=ON ALPAKA_CUDA_VERSION=10.2 ALPAKA_CUDA_COMPILER=nvcc ALPAKA_CUDA_ARCH="30;35" + # nvcc + clang++ + - name: nvcc-10.2 + clang-4 Release + env: ALPAKA_CI_DOCKER_BASE_IMAGE_NAME=ubuntu:16.04 CXX=clang++ CC=clang ALPAKA_CI_CLANG_VER=4.0.0 CMAKE_BUILD_TYPE=Release ALPAKA_CI_STDLIB=libstdc++ ALPAKA_CI_BOOST_BRANCH=boost-1.65.1 ALPAKA_CI_CMAKE_VER=3.15.2 ALPAKA_ACC_GPU_CUDA_ENABLE=ON ALPAKA_CUDA_VERSION=10.2 ALPAKA_CUDA_COMPILER=nvcc ALPAKA_CUDA_ARCH="30;60" + - name: nvcc-10.2 + clang-5 Debug + env: ALPAKA_CI_DOCKER_BASE_IMAGE_NAME=ubuntu:16.04 CXX=clang++ CC=clang ALPAKA_CI_CLANG_VER=5.0.2 CMAKE_BUILD_TYPE=Debug ALPAKA_CI_STDLIB=libstdc++ ALPAKA_CI_BOOST_BRANCH=boost-1.67.0 ALPAKA_CI_CMAKE_VER=3.13.5 ALPAKA_ACC_GPU_CUDA_ENABLE=ON ALPAKA_CUDA_VERSION=10.2 ALPAKA_CUDA_COMPILER=nvcc ALPAKA_CUDA_ARCH="75" + - name: nvcc-10.2 + clang-6 Release ALPAKA_ACC_GPU_CUDA_ONLY_MODE + env: ALPAKA_CI_DOCKER_BASE_IMAGE_NAME=ubuntu:16.04 CXX=clang++ CC=clang ALPAKA_CI_CLANG_VER=6.0.1 CMAKE_BUILD_TYPE=Release ALPAKA_CI_STDLIB=libstdc++ ALPAKA_CI_BOOST_BRANCH=boost-1.69.0 ALPAKA_CI_CMAKE_VER=3.11.4 ALPAKA_ACC_GPU_CUDA_ENABLE=ON ALPAKA_CUDA_VERSION=10.2 ALPAKA_CUDA_COMPILER=nvcc ALPAKA_CUDA_ARCH="70" ALPAKA_ACC_GPU_CUDA_ONLY_MODE=ON + - name: nvcc-10.2 + clang-7 Debug + env: ALPAKA_CI_DOCKER_BASE_IMAGE_NAME=ubuntu:16.04 CXX=clang++ CC=clang ALPAKA_CI_CLANG_VER=7.0.1 CMAKE_BUILD_TYPE=Debug ALPAKA_CI_STDLIB=libstdc++ ALPAKA_CI_BOOST_BRANCH=boost-1.70.0 ALPAKA_CI_CMAKE_VER=3.12.4 ALPAKA_ACC_GPU_CUDA_ENABLE=ON ALPAKA_CUDA_VERSION=10.2 ALPAKA_CUDA_COMPILER=nvcc ALPAKA_CUDA_ARCH="75" + - name: nvcc-10.2 + clang-8 Release + env: ALPAKA_CI_DOCKER_BASE_IMAGE_NAME=ubuntu:16.04 CXX=clang++ CC=clang ALPAKA_CI_CLANG_VER=8.0.0 CMAKE_BUILD_TYPE=Release ALPAKA_CI_STDLIB=libstdc++ ALPAKA_CI_BOOST_BRANCH=boost-1.70.0 ALPAKA_CI_CMAKE_VER=3.12.4 ALPAKA_ACC_GPU_CUDA_ENABLE=ON ALPAKA_CUDA_VERSION=10.2 ALPAKA_CUDA_COMPILER=nvcc ALPAKA_CUDA_ARCH="75" + # nvcc + MSVC + - name: nvcc-10.2 + MSVC-2017 Debug ALPAKA_ACC_GPU_CUDA_ONLY_MODE + os: windows + dist: 1803-containers + language: cpp + env: CXX=cl.exe CC=cl.exe CMAKE_BUILD_TYPE=Debug ALPAKA_CI_BOOST_BRANCH=boost-1.67.0 ALPAKA_CI_CMAKE_VER=3.11.4 ALPAKA_ACC_GPU_CUDA_ENABLE=ON ALPAKA_CUDA_VERSION=10.2 ALPAKA_CUDA_ARCH="30;75" ALPAKA_ACC_GPU_CUDA_ONLY_MODE=ON + - name: nvcc-10.2 + MSVC-2017 Release (Only one CPU backend enabled due to compile time) + os: windows + dist: 1803-containers + language: cpp + env: CXX=cl.exe CC=cl.exe CMAKE_BUILD_TYPE=Release ALPAKA_CI_BOOST_BRANCH=boost-1.65.1 ALPAKA_CI_CMAKE_VER=3.14.4 ALPAKA_ACC_GPU_CUDA_ENABLE=ON ALPAKA_CUDA_VERSION=10.2 ALPAKA_ACC_CPU_B_SEQ_T_SEQ_ENABLE=OFF ALPAKA_ACC_CPU_B_SEQ_T_THREADS_ENABLE=OFF ALPAKA_ACC_CPU_B_SEQ_T_FIBERS_ENABLE=OFF ALPAKA_ACC_CPU_B_SEQ_T_OMP2_ENABLE=OFF ALPAKA_ACC_CPU_BT_OMP4_ENABLE=OFF ALPAKA_ACC_CPU_B_TBB_T_SEQ_ENABLE=OFF + ## HIP - name: HIP(nvcc9.2) + gcc-5 Debug ALPAKA_ACC_GPU_HIP_ONLY_MODE env: ALPAKA_CI_DOCKER_BASE_IMAGE_NAME=ubuntu:16.04 CXX=g++ CC=gcc ALPAKA_CI_GCC_VER=5 CMAKE_BUILD_TYPE=Debug ALPAKA_CI_STDLIB=libstdc++ ALPAKA_CI_BOOST_BRANCH=boost-1.67.0 ALPAKA_CI_CMAKE_VER=3.11.4 ALPAKA_ACC_GPU_HIP_ENABLE=ON ALPAKA_ACC_GPU_HIP_ONLY_MODE=ON ALPAKA_CI_HIP_BRANCH="roc-2.8.0" ALPAKA_HIP_PLATFORM=nvcc ALPAKA_CUDA_ARCH="30;35" ALPAKA_CUDA_VERSION=9.2 ALPAKA_CUDA_COMPILER=nvcc ALPAKA_CUDA_NVCC_EXPT_RELAXED_CONSTEXPR=OFF ALPAKA_CUDA_NVCC_EXPT_EXTENDED_LAMBDA=OFF diff --git a/README.md b/README.md index ce20dc72e77b..b544bc055b7f 100644 --- a/README.md +++ b/README.md @@ -56,7 +56,7 @@ Accelerator Back-ends | std::thread | std::thread |Host CPU (multi core)|sequential|parallel (preemptive multitasking)| | Boost.Fiber | boost::fibers::fiber |Host CPU (single core)|sequential|parallel (cooperative multitasking)| |TBB|TBB 2.2+|Host CPU (multi core)|parallel (preemptive multitasking)|sequential (only 1 thread per block)| -|CUDA|CUDA 8.0-10.0|NVIDIA GPUs|parallel (undefined)|parallel (lock-step within warps)| +|CUDA|CUDA 8.0-10.2|NVIDIA GPUs|parallel (undefined)|parallel (lock-step within warps)| |HIP(nvcc)|[HIP 1.5+](https://github.com/ROCm-Developer-Tools/HIP)|NVIDIA GPUs SM 2.0+|parallel (undefined)|parallel (lock-step within warps)| @@ -74,7 +74,7 @@ This library uses C++11 (or newer when available). | std::thread |:white_check_mark:|:white_check_mark:|:white_check_mark:|:white_check_mark:|:white_check_mark:|:white_check_mark:|:white_check_mark:|:white_check_mark:|:white_check_mark:|:white_check_mark:|:white_check_mark:|:white_check_mark:| | Boost.Fiber |:white_check_mark:|:white_check_mark:|:white_check_mark:|:white_check_mark:|:white_check_mark:|:white_check_mark:|:white_check_mark:|:white_check_mark:|:white_check_mark:|:white_check_mark:|:x:|:white_check_mark:| |TBB|:white_check_mark:|:white_check_mark:|:white_check_mark:|:white_check_mark:|:white_check_mark:|:white_check_mark:|:white_check_mark:|:white_check_mark:|:white_check_mark:|:white_check_mark:|:white_check_mark:|:white_check_mark:| -|CUDA (nvcc)|:white_check_mark:
(CUDA 8.0-10.1)|:white_check_mark:
(CUDA 9.0-10.1)|:white_check_mark:
(CUDA 9.2-10.1) |:x:|:white_check_mark:
(CUDA 9.1-10.1)|:white_check_mark:
(CUDA 10.1)|:white_check_mark:
(CUDA 10.1)|:white_check_mark:
(CUDA 10.1)|:white_check_mark:
(CUDA 10.1)|:x:|:x:|:white_check_mark:
(CUDA 10.0-10.1)| +|CUDA (nvcc)|:white_check_mark:
(CUDA 8.0-10.2)|:white_check_mark:
(CUDA 9.0-10.2)|:white_check_mark:
(CUDA 9.2-10.2) |:x:|:white_check_mark:
(CUDA 9.1-10.2)|:white_check_mark:
(CUDA 10.1-10.2)|:white_check_mark:
(CUDA 10.1-10.2)|:white_check_mark:
(CUDA 10.1-10.2)|:white_check_mark:
(CUDA 10.1-10.2)|:x:|:x:|:white_check_mark:
(CUDA 10.0-10.2)| |CUDA (clang) | - | - | - | - | :white_check_mark:
(CUDA 8.0)| :white_check_mark:
(CUDA 8.0)| :white_check_mark:
(CUDA 8.0-9.0) | :white_check_mark:
(CUDA 8.0-9.2) | :white_check_mark:
(CUDA 8.0-10.0) | :white_check_mark:
(CUDA 9.2-10.1) | - | - | |[HIP](doc/markdown/user/implementation/mapping/HIP.md) (nvcc)|:white_check_mark:
(nvcc 9.0+)|:x:|:x:|:x:|:x:|:x:|:x:|:x:|:x:|:x:|:x:|:x:| diff --git a/alpakaConfig.cmake b/alpakaConfig.cmake index ec2d913f95ce..81f6855d9251 100644 --- a/alpakaConfig.cmake +++ b/alpakaConfig.cmake @@ -466,6 +466,10 @@ IF(ALPAKA_ACC_GPU_CUDA_ENABLE) IF(CUDA_VERSION GREATER_EQUAL 10.1) MESSAGE(FATAL_ERROR "Clang versions lower than 9 do not support CUDA 10.1 or greater!") ENDIF() + ELSEIF(CMAKE_CXX_COMPILER_VERSION LESS 10.0) + IF(CUDA_VERSION GREATER_EQUAL 10.2) + MESSAGE(FATAL_ERROR "Clang versions lower than 10 do not support CUDA 10.2 or greater!") + ENDIF() ENDIF() IF(ALPAKA_ACC_CPU_B_SEQ_T_FIBERS_ENABLE) @@ -545,6 +549,10 @@ IF(ALPAKA_ACC_GPU_CUDA_ENABLE) IF(CMAKE_CXX_COMPILER_VERSION GREATER_EQUAL 9.0) MESSAGE(FATAL_ERROR "NVCC 10.1 does not support GCC 9+. Please use GCC 4.9, 5, 6, 7 or 8!") ENDIF() + ELSEIF(CUDA_VERSION VERSION_EQUAL 10.2) + IF(CMAKE_CXX_COMPILER_VERSION GREATER_EQUAL 9.0) + MESSAGE(FATAL_ERROR "NVCC 10.2 does not support GCC 9+. Please use GCC 4.9, 5, 6, 7 or 8!") + ENDIF() ENDIF() ELSEIF("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") IF(CUDA_VERSION VERSION_EQUAL 8.0) @@ -571,6 +579,10 @@ IF(ALPAKA_ACC_GPU_CUDA_ENABLE) IF(CMAKE_CXX_COMPILER_VERSION GREATER_EQUAL 9.0) MESSAGE(FATAL_ERROR "NVCC 10.1 does not support clang 9+. Please use clang 4, 5, 6, 7 or 8!") ENDIF() + ELSEIF(CUDA_VERSION VERSION_EQUAL 10.2) + IF(CMAKE_CXX_COMPILER_VERSION GREATER_EQUAL 9.0) + MESSAGE(FATAL_ERROR "NVCC 10.2 does not support clang 9+. Please use clang 4, 5, 6, 7 or 8!") + ENDIF() ENDIF() ENDIF() @@ -678,15 +690,9 @@ IF(ALPAKA_ACC_GPU_CUDA_ENABLE) # avoids warnings on host-device signature of 'std::__shared_count<>' IF(CUDA_VERSION EQUAL 10.0) LIST(APPEND CUDA_NVCC_FLAGS -Xcudafe --diag_suppress=2905) - ENDIF() - - # avoids warnings on host-device signature of 'std::__shared_count<>' - IF(CUDA_VERSION EQUAL 10.1) + ELSEIF(CUDA_VERSION EQUAL 10.1) LIST(APPEND CUDA_NVCC_FLAGS -Xcudafe --diag_suppress=2912) - ENDIF() - - # avoids warnings on host-device signature of 'std::__shared_count<>' - IF(CUDA_VERSION EQUAL 10.2) + ELSEIF(CUDA_VERSION EQUAL 10.2) LIST(APPEND CUDA_NVCC_FLAGS -Xcudafe --diag_suppress=2976) ENDIF() diff --git a/script/travis/install_cuda.sh b/script/travis/install_cuda.sh index bd4f3a57f442..31e095b2b583 100755 --- a/script/travis/install_cuda.sh +++ b/script/travis/install_cuda.sh @@ -60,8 +60,13 @@ then ALPAKA_CUDA_PKG_DEB_NAME=cuda-repo-ubuntu1804-10-1-local ALPAKA_CUDA_PKG_FILE_NAME="${ALPAKA_CUDA_PKG_DEB_NAME}"-10.1.168-418.67_1.0-1_amd64.deb ALPAKA_CUDA_PKG_FILE_PATH=https://developer.nvidia.com/compute/cuda/10.1/Prod/local_installers/${ALPAKA_CUDA_PKG_FILE_NAME} + elif [ "${ALPAKA_CUDA_VERSION}" == "10.2" ] + then + ALPAKA_CUDA_PKG_DEB_NAME=cuda-repo-ubuntu1804-10-2-local + ALPAKA_CUDA_PKG_FILE_NAME="${ALPAKA_CUDA_PKG_DEB_NAME}"-10.2.89-440.33.01_1.0-1_amd64.deb + ALPAKA_CUDA_PKG_FILE_PATH=http://developer.download.nvidia.com/compute/cuda/10.2/Prod/local_installers/${ALPAKA_CUDA_PKG_FILE_NAME} else - echo CUDA versions other than 8.0, 9.0, 9.1, 9.2, 10.0 and 10.1 are not currently supported on linux! + echo CUDA versions other than 8.0, 9.0, 9.1, 9.2, 10.0, 10.1 and 10.2 are not currently supported on linux! fi if [ -z "$(ls -A ${ALPAKA_CI_CUDA_DIR})" ] then @@ -96,8 +101,12 @@ then then ALPAKA_CUDA_PKG_FILE_NAME=cuda_10.1.168_425.25_win10.exe ALPAKA_CUDA_PKG_FILE_PATH=https://developer.nvidia.com/compute/cuda/10.1/Prod/local_installers/${ALPAKA_CUDA_PKG_FILE_NAME} + elif [ "${ALPAKA_CUDA_VERSION}" == "10.2" ] + then + ALPAKA_CUDA_PKG_FILE_NAME=cuda_10.2.89_441.22_win10.exe + ALPAKA_CUDA_PKG_FILE_PATH=http://developer.download.nvidia.com/compute/cuda/10.2/Prod/local_installers/${ALPAKA_CUDA_PKG_FILE_NAME} else - echo CUDA versions other than 10.0 and 10.1 are not currently supported on Windows! + echo CUDA versions other than 10.0, 10.1 and 10.2 are not currently supported on Windows! fi curl -L -o cuda_installer.exe ${ALPAKA_CUDA_PKG_FILE_PATH} diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 89ab17c34f02..2a4797b06a03 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -57,14 +57,19 @@ SET_TARGET_PROPERTIES( CatchMain PROPERTIES FOLDER "test") -# NVCC does not incorporate the COMPILE_OPTIONS of a target but only the CMAKE_CXX_FLAGS -IF(ALPAKA_ACC_GPU_CUDA_ENABLE AND NOT ALPAKA_CUDA_COMPILER MATCHES "clang") +IF(ALPAKA_ACC_GPU_CUDA_ENABLE AND ALPAKA_CUDA_COMPILER MATCHES "nvcc") + # NVCC does not incorporate the COMPILE_OPTIONS of a target but only the CMAKE_CXX_FLAGS GET_TARGET_PROPERTY(_COMMON_COMPILE_OPTIONS common COMPILE_OPTIONS) # If the property does not exist, the variable is set to NOTFOUND. IF(_COMMON_COMPILE_OPTIONS) STRING(REPLACE ";" " " _COMMON_COMPILE_OPTIONS_STRING "${_COMMON_COMPILE_OPTIONS}") SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${_COMMON_COMPILE_OPTIONS_STRING}") ENDIF() + # nvcc supports werror starting with 10.2 + IF(CUDA_VERSION GREATER_EQUAL 10.2) + MESSAGE("adding -Werror=all-warnings") + LIST(APPEND CUDA_NVCC_FLAGS -Werror=all-warnings) + ENDIF() ENDIF() LIST(APPEND _ALPAKA_TEST_OPTIONS "--use-colour yes") diff --git a/test/unit/CMakeLists.txt b/test/unit/CMakeLists.txt index 9c39d074ca6b..02f21adda5b3 100644 --- a/test/unit/CMakeLists.txt +++ b/test/unit/CMakeLists.txt @@ -14,8 +14,6 @@ CMAKE_MINIMUM_REQUIRED(VERSION 3.11.0) -PROJECT("alpakaUnitTest") - ################################################################################ # Add subdirectories. ################################################################################ diff --git a/test/unit/queue/src/CollectiveQueue.cpp b/test/unit/queue/src/CollectiveQueue.cpp index 3f3c6a1b6d7f..3fb220a3b34a 100644 --- a/test/unit/queue/src/CollectiveQueue.cpp +++ b/test/unit/queue/src/CollectiveQueue.cpp @@ -25,7 +25,7 @@ struct QueueCollectiveTestKernel { template - ALPAKA_FN_ACC auto operator()( + auto operator()( TAcc const & acc, int* resultsPtr) const -> void