diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index fe14a5a3fa8e..e8aadae25b45 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -15,14 +15,14 @@ concurrency: # NOTE: Testing the full matrix is not practical. # Therefore we aim to have each value been set in at lest one job. # ALPAKA_CI_CXX : {g++, clang++} -# [g++] ALPAKA_CI_GCC_VER : {9, 10, 11, 12, 13} -# [clang++] ALPAKA_CI_CLANG_VER : {9, 10, 11, 12, 13, 14} +# [g++] ALPAKA_CI_GCC_VER : {10, 11, 12, 13} +# [clang++] ALPAKA_CI_CLANG_VER : {10, 11, 12, 13, 14} # [cl.exe] ALPAKA_CI_CL_VER : {2022} # ALPAKA_CI_STDLIB : {libstdc++, [ALPAKA_CI_CXX==clang++]:libc++} # CMAKE_BUILD_TYPE : {Debug, Release} # alpaka_CI : {GITHUB} # ALPAKA_BOOST_VERSION : {1.74.0, 1.75.0, 1.76.0, 1.77.0, 1.78.0, 1.79.0, 1.80.0, 1.81.0, 1.82.0, 1.83.0, 1.84.0, 1.85.0, 1.86.0} -# ALPAKA_CI_CMAKE_VER : {3.22.6, 3.23.5, 3.24.4, 3.25.3, 3.26.4, 3.27.9, 3.28.6, 3.29.8, 3.30.3} +# ALPAKA_CI_CMAKE_VER : {3.25.1, 3.25.3, 3.26.4} # ALPAKA_CI_XCODE_VER : {13.2.1, 14.2} # ALPAKA_CI_SANITIZERS : {ASan, UBsan, TSan} # TSan is not currently used because it produces many unexpected errors @@ -61,7 +61,7 @@ env: ALPAKA_CI_ONEAPI_VERSION: 2024.0 ALPAKA_CI_TBB_VERSION: 2021.10.0 ALPAKA_CI_RUN_TESTS: ON - alpaka_CXX_STANDARD: 17 + alpaka_CXX_STANDARD: 20 alpaka_ACC_CPU_B_SEQ_T_SEQ_ENABLE: ON alpaka_ACC_CPU_B_SEQ_T_THREADS_ENABLE: ON alpaka_ACC_CPU_B_TBB_T_SEQ_ENABLE: ON @@ -108,17 +108,17 @@ jobs: ### Analysis builds - name: linux_clang-14_cuda-11.2_debug_analysis os: ubuntu-20.04 - env: {ALPAKA_CI_CXX: clang++, ALPAKA_CI_CLANG_VER: 14, ALPAKA_CI_STDLIB: libstdc++, CMAKE_BUILD_TYPE: Debug, ALPAKA_BOOST_VERSION: 1.79.0, ALPAKA_CI_CMAKE_VER: 3.23.5, OMP_NUM_THREADS: 4, ALPAKA_CI_ANALYSIS: ON, ALPAKA_CI_RUN_TESTS: OFF, alpaka_DEBUG: 1, alpaka_ACC_GPU_CUDA_ENABLE: ON, ALPAKA_CI_CUDA_VERSION: "11.2", ALPAKA_CI_CUDA_COMPILER : clang++, alpaka_ACC_CPU_B_OMP2_T_SEQ_ENABLE: OFF, alpaka_ACC_CPU_B_SEQ_T_OMP2_ENABLE: OFF} + env: {ALPAKA_CI_CXX: clang++, ALPAKA_CI_CLANG_VER: 14, ALPAKA_CI_STDLIB: libstdc++, CMAKE_BUILD_TYPE: Debug, ALPAKA_BOOST_VERSION: 1.79.0, ALPAKA_CI_CMAKE_VER: 3.25.3, OMP_NUM_THREADS: 4, ALPAKA_CI_ANALYSIS: ON, ALPAKA_CI_RUN_TESTS: OFF, alpaka_DEBUG: 1, alpaka_ACC_GPU_CUDA_ENABLE: ON, ALPAKA_CI_CUDA_VERSION: "11.2", ALPAKA_CI_CUDA_COMPILER : clang++, alpaka_ACC_CPU_B_OMP2_T_SEQ_ENABLE: OFF, alpaka_ACC_CPU_B_SEQ_T_OMP2_ENABLE: OFF} container: ubuntu:20.04 - name: windows_cl-2022_debug_analysis os: windows-2022 - env: {ALPAKA_CI_CXX: cl.exe, ALPAKA_CI_CL_VER: 2022, CMAKE_BUILD_TYPE: Debug, ALPAKA_BOOST_VERSION: 1.78.0, ALPAKA_CI_CMAKE_VER: 3.23.5, ALPAKA_CI_ANALYSIS: ON, alpaka_DEBUG: 2} + env: {ALPAKA_CI_CXX: cl.exe, ALPAKA_CI_CL_VER: 2022, CMAKE_BUILD_TYPE: Debug, ALPAKA_BOOST_VERSION: 1.78.0, ALPAKA_CI_CMAKE_VER: 3.25.3, ALPAKA_CI_ANALYSIS: ON, alpaka_DEBUG: 2} - name: macos_xcode-14.2_debug_analysis os: macos-12 env: {ALPAKA_CI_CXX: clang++, ALPAKA_CI_XCODE_VER: 14.2, CMAKE_BUILD_TYPE: Debug, ALPAKA_BOOST_VERSION: 1.81.0, ALPAKA_CI_ANALYSIS: ON, alpaka_DEBUG: 2, alpaka_ACC_CPU_B_OMP2_T_SEQ_ENABLE: ON, alpaka_ACC_CPU_B_SEQ_T_OMP2_ENABLE: ON, ALPAKA_CI_BUILD_JOBS: 3} - name: linux_gcc-12_debug_analysis os: ubuntu-22.04 - env: {ALPAKA_CI_CXX: g++, ALPAKA_CI_GCC_VER: 12, ALPAKA_CI_STDLIB: libstdc++, CMAKE_BUILD_TYPE: Debug, ALPAKA_BOOST_VERSION: 1.80.0, ALPAKA_CI_CMAKE_VER: 3.23.5, OMP_NUM_THREADS: 4, ALPAKA_CI_ANALYSIS: ON, alpaka_DEBUG: 2} + env: {ALPAKA_CI_CXX: g++, ALPAKA_CI_GCC_VER: 12, ALPAKA_CI_STDLIB: libstdc++, CMAKE_BUILD_TYPE: Debug, ALPAKA_BOOST_VERSION: 1.80.0, ALPAKA_CI_CMAKE_VER: 3.25.3, OMP_NUM_THREADS: 4, ALPAKA_CI_ANALYSIS: ON, alpaka_DEBUG: 2} container: ubuntu:22.04 ### macOS @@ -132,7 +132,7 @@ jobs: ### Windows - name: windows_cl-2022_release os: windows-2022 - env: {ALPAKA_CI_CXX: cl.exe, ALPAKA_CI_CL_VER: 2022, CMAKE_BUILD_TYPE: Release, ALPAKA_BOOST_VERSION: 1.79.0, ALPAKA_CI_CMAKE_VER: 3.24.4, OMP_NUM_THREADS: 1} + env: {ALPAKA_CI_CXX: cl.exe, ALPAKA_CI_CL_VER: 2022, CMAKE_BUILD_TYPE: Release, ALPAKA_BOOST_VERSION: 1.79.0, ALPAKA_CI_CMAKE_VER: 3.25.3, OMP_NUM_THREADS: 1} - name: windows_cl-2022_debug os: windows-2022 env: {ALPAKA_CI_CXX: cl.exe, ALPAKA_CI_CL_VER: 2022, CMAKE_BUILD_TYPE: Debug, ALPAKA_BOOST_VERSION: 1.80.0, ALPAKA_CI_CMAKE_VER: 3.25.1, OMP_NUM_THREADS: 4, alpaka_ACC_CPU_B_TBB_T_SEQ_ENABLE: OFF, alpaka_ACC_CPU_B_SEQ_T_OMP2_ENABLE: OFF} @@ -141,7 +141,7 @@ jobs: # nvcc + MSVC # - name: windows_nvcc-12.1_cl-2022_release_cuda-only # os: windows-2022 - # env: {ALPAKA_CI_CXX: cl.exe, ALPAKA_CI_CL_VER: 2022, CMAKE_BUILD_TYPE: Release, ALPAKA_BOOST_VERSION: 1.81.0, ALPAKA_CI_CMAKE_VER: 3.24.4, ALPAKA_CI_RUN_TESTS: OFF, alpaka_ACC_GPU_CUDA_ENABLE: ON, ALPAKA_CI_CUDA_VERSION: "12.1", CMAKE_CUDA_ARCHITECTURES: "50;90", alpaka_ACC_GPU_CUDA_ONLY_MODE: ON, alpaka_ACC_CPU_B_SEQ_T_SEQ_ENABLE: OFF, alpaka_ACC_CPU_B_SEQ_T_THREADS_ENABLE: OFF, alpaka_ACC_CPU_B_TBB_T_SEQ_ENABLE: OFF, alpaka_ACC_CPU_B_OMP2_T_SEQ_ENABLE: OFF, alpaka_ACC_CPU_B_SEQ_T_OMP2_ENABLE: OFF} + # env: {ALPAKA_CI_CXX: cl.exe, ALPAKA_CI_CL_VER: 2022, CMAKE_BUILD_TYPE: Release, ALPAKA_BOOST_VERSION: 1.81.0, ALPAKA_CI_CMAKE_VER: 3.25.3, ALPAKA_CI_RUN_TESTS: OFF, alpaka_ACC_GPU_CUDA_ENABLE: ON, ALPAKA_CI_CUDA_VERSION: "12.1", CMAKE_CUDA_ARCHITECTURES: "50;90", alpaka_ACC_GPU_CUDA_ONLY_MODE: ON, alpaka_ACC_CPU_B_SEQ_T_SEQ_ENABLE: OFF, alpaka_ACC_CPU_B_SEQ_T_THREADS_ENABLE: OFF, alpaka_ACC_CPU_B_TBB_T_SEQ_ENABLE: OFF, alpaka_ACC_CPU_B_OMP2_T_SEQ_ENABLE: OFF, alpaka_ACC_CPU_B_SEQ_T_OMP2_ENABLE: OFF} # - name: windows_nvcc-12.1_cl-2022_debug # os: windows-2022 # env: {ALPAKA_CI_CXX: cl.exe, ALPAKA_CI_CL_VER: 2022, CMAKE_BUILD_TYPE: Debug, ALPAKA_BOOST_VERSION: 1.78.0, ALPAKA_CI_CMAKE_VER: 3.25.1, ALPAKA_CI_RUN_TESTS: OFF, alpaka_ACC_GPU_CUDA_ENABLE: ON, ALPAKA_CI_CUDA_VERSION: "12.1", alpaka_ACC_CPU_BT_OMP5_ENABLE: OFF, alpaka_ACC_CPU_B_TBB_T_SEQ_ENABLE: OFF} @@ -154,13 +154,13 @@ jobs: # TODO: keep jobs until GitLab CI supports: # - disable CMAKE_CXX_EXTENSIONS=OFF # - Ubuntu 22.04 - - name: linux_gcc-9_debug + - name: linux_gcc-11_debug os: ubuntu-20.04 - env: {ALPAKA_CI_CXX: g++, ALPAKA_CI_GCC_VER: 9, ALPAKA_CI_STDLIB: libstdc++, CMAKE_BUILD_TYPE: Debug, ALPAKA_BOOST_VERSION: 1.74.0, ALPAKA_CI_CMAKE_VER: 3.22.6, OMP_NUM_THREADS: 4, CMAKE_CXX_EXTENSIONS: OFF} + env: {ALPAKA_CI_CXX: g++, ALPAKA_CI_GCC_VER: 11, ALPAKA_CI_STDLIB: libstdc++, CMAKE_BUILD_TYPE: Debug, ALPAKA_BOOST_VERSION: 1.74.0, ALPAKA_CI_CMAKE_VER: 3.25.3, OMP_NUM_THREADS: 4, CMAKE_CXX_EXTENSIONS: OFF} container: ubuntu:20.04 - name: linux_gcc-12_release_c++20 os: ubuntu-22.04 - env: {ALPAKA_CI_CXX: g++, ALPAKA_CI_GCC_VER: 12, ALPAKA_CI_STDLIB: libstdc++, CMAKE_BUILD_TYPE: Release, ALPAKA_BOOST_VERSION: 1.80.0, ALPAKA_CI_CMAKE_VER: 3.24.4, OMP_NUM_THREADS: 2, alpaka_CXX_STANDARD: 20, alpaka_USE_MDSPAN: "FETCH"} + env: {ALPAKA_CI_CXX: g++, ALPAKA_CI_GCC_VER: 12, ALPAKA_CI_STDLIB: libstdc++, CMAKE_BUILD_TYPE: Release, ALPAKA_BOOST_VERSION: 1.80.0, ALPAKA_CI_CMAKE_VER: 3.25.3, OMP_NUM_THREADS: 2, alpaka_CXX_STANDARD: 20, alpaka_USE_MDSPAN: "FETCH"} container: ubuntu:22.04 - name: linux_gcc-13_debug os: ubuntu-22.04 @@ -175,24 +175,24 @@ jobs: # clang++ - name: linux_clang-10_release os: ubuntu-20.04 - env: {ALPAKA_CI_CXX: clang++, ALPAKA_CI_CLANG_VER: 10, ALPAKA_CI_STDLIB: libc++, CMAKE_BUILD_TYPE: Release, ALPAKA_BOOST_VERSION: 1.75.0, ALPAKA_CI_CMAKE_VER: 3.23.5, OMP_NUM_THREADS: 4, alpaka_ACC_CPU_B_TBB_T_SEQ_ENABLE: OFF, CMAKE_CXX_EXTENSIONS: OFF} + env: {ALPAKA_CI_CXX: clang++, ALPAKA_CI_CLANG_VER: 10, ALPAKA_CI_STDLIB: libc++, CMAKE_BUILD_TYPE: Release, ALPAKA_BOOST_VERSION: 1.75.0, ALPAKA_CI_CMAKE_VER: 3.25.3, OMP_NUM_THREADS: 4, alpaka_ACC_CPU_B_TBB_T_SEQ_ENABLE: OFF, CMAKE_CXX_EXTENSIONS: OFF} container: ubuntu:20.04 # clang-11 tested in GitLab CI - name: linux_clang-12_release os: ubuntu-20.04 - env: {ALPAKA_CI_CXX: clang++, ALPAKA_CI_CLANG_VER: 12, ALPAKA_CI_STDLIB: libc++, CMAKE_BUILD_TYPE: Release, ALPAKA_BOOST_VERSION: 1.77.0, ALPAKA_CI_CMAKE_VER: 3.24.4, OMP_NUM_THREADS: 4, alpaka_ACC_CPU_B_TBB_T_SEQ_ENABLE: OFF, CMAKE_CXX_EXTENSIONS: OFF} + env: {ALPAKA_CI_CXX: clang++, ALPAKA_CI_CLANG_VER: 12, ALPAKA_CI_STDLIB: libc++, CMAKE_BUILD_TYPE: Release, ALPAKA_BOOST_VERSION: 1.77.0, ALPAKA_CI_CMAKE_VER: 3.25.3, OMP_NUM_THREADS: 4, alpaka_ACC_CPU_B_TBB_T_SEQ_ENABLE: OFF, CMAKE_CXX_EXTENSIONS: OFF} container: ubuntu:20.04 - name: linux_clang-13_debug os: ubuntu-22.04 - env: {ALPAKA_CI_CXX: clang++, ALPAKA_CI_CLANG_VER: 13, ALPAKA_CI_STDLIB: libstdc++, CMAKE_BUILD_TYPE: Debug, ALPAKA_BOOST_VERSION: 1.79.0, ALPAKA_CI_CMAKE_VER: 3.23.5, OMP_NUM_THREADS: 3, CMAKE_CXX_EXTENSIONS: OFF} + env: {ALPAKA_CI_CXX: clang++, ALPAKA_CI_CLANG_VER: 13, ALPAKA_CI_STDLIB: libstdc++, CMAKE_BUILD_TYPE: Debug, ALPAKA_BOOST_VERSION: 1.79.0, ALPAKA_CI_CMAKE_VER: 3.25.3, OMP_NUM_THREADS: 3, CMAKE_CXX_EXTENSIONS: OFF} container: ubuntu:22.04 - name: linux_clang-16_debug_ubsan os: ubuntu-22.04 - env: {ALPAKA_CI_CXX: clang++, ALPAKA_CI_CLANG_VER: 16, ALPAKA_CI_STDLIB: libstdc++, CMAKE_BUILD_TYPE: Debug, ALPAKA_BOOST_VERSION: 1.77.0, ALPAKA_CI_CMAKE_VER: 3.23.5, OMP_NUM_THREADS: 4, CMAKE_CXX_EXTENSIONS: OFF, ALPAKA_CI_SANITIZERS: UBSan} + env: {ALPAKA_CI_CXX: clang++, ALPAKA_CI_CLANG_VER: 16, ALPAKA_CI_STDLIB: libstdc++, CMAKE_BUILD_TYPE: Debug, ALPAKA_BOOST_VERSION: 1.77.0, ALPAKA_CI_CMAKE_VER: 3.25.3, OMP_NUM_THREADS: 4, CMAKE_CXX_EXTENSIONS: OFF, ALPAKA_CI_SANITIZERS: UBSan} container: ubuntu:22.04 - name: linux_clang-16_debug_tsan os: ubuntu-22.04 - env: {ALPAKA_CI_CXX: clang++, ALPAKA_CI_CLANG_VER: 16, ALPAKA_CI_STDLIB: libstdc++, CMAKE_BUILD_TYPE: Debug, ALPAKA_BOOST_VERSION: 1.77.0, ALPAKA_CI_CMAKE_VER: 3.23.5, OMP_NUM_THREADS: 4, alpaka_ACC_CPU_B_OMP2_T_SEQ_ENABLE: OFF, alpaka_ACC_CPU_B_SEQ_T_OMP2_ENABLE: OFF, alpaka_ACC_CPU_B_TBB_T_SEQ_ENABLE: OFF, CMAKE_CXX_EXTENSIONS: OFF, ALPAKA_CI_SANITIZERS: TSan} + env: {ALPAKA_CI_CXX: clang++, ALPAKA_CI_CLANG_VER: 16, ALPAKA_CI_STDLIB: libstdc++, CMAKE_BUILD_TYPE: Debug, ALPAKA_BOOST_VERSION: 1.77.0, ALPAKA_CI_CMAKE_VER: 3.25.3, OMP_NUM_THREADS: 4, alpaka_ACC_CPU_B_OMP2_T_SEQ_ENABLE: OFF, alpaka_ACC_CPU_B_SEQ_T_OMP2_ENABLE: OFF, alpaka_ACC_CPU_B_TBB_T_SEQ_ENABLE: OFF, CMAKE_CXX_EXTENSIONS: OFF, ALPAKA_CI_SANITIZERS: TSan} container: ubuntu:22.04 steps: diff --git a/.zenodo.json b/.zenodo.json index 7543871705f3..9d48afe487cf 100644 --- a/.zenodo.json +++ b/.zenodo.json @@ -1,6 +1,6 @@ { "title": "alpaka: Abstraction Library for Parallel Kernel Acceleration", - "description": "The alpaka library is a header-only C++17 abstraction library for accelerator development. Its aim is to provide performance portability across accelerators through the abstraction (not hiding!) of the underlying levels of parallelism.", + "description": "The alpaka library is a header-only C++20 abstraction library for accelerator development. Its aim is to provide performance portability across accelerators through the abstraction (not hiding!) of the underlying levels of parallelism.", "creators": [ { "name": "Bocci, Andrea", diff --git a/CMakeLists.txt b/CMakeLists.txt index fcaae9721f26..0c1f702e4fc5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -6,7 +6,7 @@ ################################################################################ # Required CMake version -cmake_minimum_required(VERSION 3.22) +cmake_minimum_required(VERSION 3.25) cmake_policy(SET CMP0091 NEW) @@ -25,7 +25,7 @@ string(REGEX MATCH "([0-9]+)" alpaka_VERSION_PATCH ${alpaka_VERSION_PATCH_HPP}) set(PACKAGE_VERSION "${alpaka_VERSION_MAJOR}.${alpaka_VERSION_MINOR}.${alpaka_VERSION_PATCH}") project(alpaka VERSION ${alpaka_VERSION_MAJOR}.${alpaka_VERSION_MINOR}.${alpaka_VERSION_PATCH} - DESCRIPTION "The alpaka library is a header-only C++17 abstraction library for accelerator development." + DESCRIPTION "The alpaka library is a header-only C++20 abstraction library for accelerator development." HOMEPAGE_URL "https://github.com/alpaka-group/alpaka" LANGUAGES CXX) diff --git a/README.md b/README.md index 650e73f99673..8b092720d504 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,7 @@ ![alpaka](docs/logo/alpaka_401x135.png) -The **alpaka** library is a header-only C++17 abstraction library for accelerator development. +The **alpaka** library is a header-only C++20 abstraction library for accelerator development. Its aim is to provide performance portability across accelerators through the abstraction (not hiding!) of the underlying levels of parallelism. @@ -49,40 +49,38 @@ The [source code documentation](https://alpaka-group.github.io/alpaka/) is gener Accelerator Back-ends --------------------- -| Accelerator Back-end | Lib/API | Devices | Execution strategy grid-blocks | Execution strategy block-threads | -|------------------------|---------------------------------------------------------|------------------------|------------------------------------|--------------------------------------| +| Accelerator Back-end | Lib/API | Devices | Execution strategy grid-blocks | Execution strategy block-threads | +|------------------------|---------------------------------------------------------|-----------------------|------------------------------------|--------------------------------------| | Serial | n/a | Host CPU (single core) | sequential | sequential (only 1 thread per block) | -| OpenMP 2.0+ blocks | OpenMP 2.0+ | Host CPU (multi core) | parallel (preemptive multitasking) | sequential (only 1 thread per block) | -| OpenMP 2.0+ threads | OpenMP 2.0+ | Host CPU (multi core) | sequential | parallel (preemptive multitasking) | -| std::thread | std::thread | Host CPU (multi core) | sequential | parallel (preemptive multitasking) | -| TBB | TBB 2.2+ | Host CPU (multi core) | parallel (preemptive multitasking) | sequential (only 1 thread per block) | -| CUDA | CUDA 9.0+ | NVIDIA GPUs | parallel (undefined) | parallel (lock-step within warps) | -| HIP(clang) | [HIP 5.1+](https://github.com/ROCm-Developer-Tools/HIP) | AMD GPUs | parallel (undefined) | parallel (lock-step within warps) | +| OpenMP 2.0+ blocks | OpenMP 2.0+ | Host CPU (multi core) | parallel (preemptive multitasking) | sequential (only 1 thread per block) | +| OpenMP 2.0+ threads | OpenMP 2.0+ | Host CPU (multi core) | sequential | parallel (preemptive multitasking) | +| std::thread | std::thread | Host CPU (multi core) | sequential | parallel (preemptive multitasking) | +| TBB | TBB 2.2+ | Host CPU (multi core) | parallel (preemptive multitasking) | sequential (only 1 thread per block) | +| CUDA | CUDA 12.0+ | NVIDIA GPUs | parallel (undefined) | parallel (lock-step within warps) | +| HIP(clang) | [HIP 6.0+](https://github.com/ROCm-Developer-Tools/HIP) | AMD GPUs | parallel (undefined) | parallel (lock-step within warps) | Supported Compilers ------------------- -This library uses C++17 (or newer when available). +This library uses C++20 (or newer when available). -| Accelerator Back-end | gcc 9.5 (Linux) | gcc 10.4 / 11.1 (Linux) | gcc 12.3 (Linux) | gcc 13.1 (Linux) | clang 9 (Linux) | clang 10/11 (Linux) | clang 12 (Linux) | clang 13 (Linux) | clang 14 (Linux) | clang 15 (Linux) | clang 16 (Linux) | clang 17 (Linux) | clang 18 (Linux) | clang 19 (Linux) | icpx 2024.2 (Linux) | Xcode 13.2.1 / 14.2 / 14.3.1 (macOS) | Visual Studio 2022 (Windows) | -|----------------------|-------------------------------------------|-------------------------------------------|---------------------------------------|---------------------------------------|-------------------------------------------|-------------------------------------------------|-------------------------------------------|---------------------------------------|---------------------------------------|---------------------------------------|---------------------------------------|---------------------------------------|---------------------------------------|--------------------|-------------------------|--------------------------------------|------------------------------| -| Serial | :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: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | -| OpenMP 2.0+ blocks | :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: | :white_check_mark: | :white_check_mark: | :white_check_mark: [^1] | :white_check_mark: | :white_check_mark: | -| OpenMP 2.0+ threads | :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: | :white_check_mark: | :white_check_mark: | :white_check_mark: [^1] | :white_check_mark: | :white_check_mark: | -| 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: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :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: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | -| CUDA (nvcc) | :white_check_mark: (CUDA 11.2 - 12.5)[^2] | :white_check_mark: (CUDA 11.4 - 12.0)[^2] | :white_check_mark: (CUDA 12.0 - 12.5) | :white_check_mark: (CUDA 12.4 - 12.5) | :white_check_mark: (CUDA 11.6 - 12.0)[^2] | :white_check_mark: (CUDA 11.2, 11.6 - 12.0)[^2] | :white_check_mark: (CUDA 11.6 - 12.0)[^2] | :white_check_mark: (CUDA 11.7 - 12.0) | :white_check_mark: (CUDA 11.8 - 12.0) | :white_check_mark: (CUDA 12.2) | :white_check_mark: (CUDA 12.3) | :white_check_mark: (CUDA 12.4 - 12.5) | :white_check_mark: (CUDA 12.4 - 12.5) | :x: | :x: | - | :x: | -| CUDA (clang) | - | - | - | - | :x: | :x: | :x: | :x: | :white_check_mark: (CUDA 11.2 - 11.5) | :white_check_mark: (CUDA 11.2 - 11.5) | :white_check_mark: (CUDA 11.2 - 11.5) | :white_check_mark: (CUDA 11.2 - 11.8) | :x: | :x: | :x: | - | - | -| HIP (clang) | - | - | - | - | :x: | :x: | :x: | :x: | :white_check_mark: (HIP 5.1 - 5.2) | :white_check_mark: (HIP 5.3 - 5.4) | :white_check_mark: (HIP 5.5 - 5.6) | :white_check_mark: (HIP 5.7 - 6.1) | :white_check_mark: (HIP 6.2) | :x: | :x: | - | - | -| SYCL | :x: | :x: | :x: | :x: | :x: | :x: | :x: | :x: | :x: | :x: | :x: | :x: | :x: | :x: | :white_check_mark: [^4] | - | :x: | +| Accelerator Back-end | gcc 10.4 / 11.1 (Linux) | gcc 12.3 (Linux) | gcc 13.1 (Linux) | clang 10/11 (Linux) | clang 12 (Linux) | clang 13 (Linux) | clang 14 (Linux) | clang 15 (Linux) | clang 16 (Linux) | clang 17 (Linux) | clang 18 (Linux) | clang 19 (Linux) | icpx 2024.2 (Linux) | Xcode 13.2.1 / 14.2 / 14.3.1 (macOS) | Visual Studio 2022 (Windows) | +|----------------------|--------------------------------|---------------------------------------|---------------------------------------|--------------------------------|--------------------------------|--------------------------------|--------------------------------|--------------------------------|--------------------------------|---------------------------------------|---------------------------------------|--------------------|-------------------------|--------------------------------------|------------------------------| +| Serial | :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: | :white_check_mark: | :white_check_mark: | :white_check_mark: | +| OpenMP 2.0+ blocks | :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: | :white_check_mark: [^1] | :white_check_mark: | :white_check_mark: | +| OpenMP 2.0+ threads | :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: | :white_check_mark: [^1] | :white_check_mark: | :white_check_mark: | +| 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: | :white_check_mark: | :white_check_mark: | :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: | :white_check_mark: | :white_check_mark: | :white_check_mark: | +| CUDA (nvcc) | :white_check_mark: (CUDA 12.0) | :white_check_mark: (CUDA 12.0 - 12.5) | :white_check_mark: (CUDA 12.4 - 12.5) | :white_check_mark: (CUDA 12.0) | :white_check_mark: (CUDA 12.0) | :white_check_mark: (CUDA 12.0) | :white_check_mark: (CUDA 12.0) | :white_check_mark: (CUDA 12.2) | :white_check_mark: (CUDA 12.3) | :white_check_mark: (CUDA 12.4 - 12.5) | :white_check_mark: (CUDA 12.4 - 12.5) | :x: | :x: | - | :x: | +| CUDA (clang) | - | - | - | :x: | :x: | :x: | :x: | :x: | :x: | :x: | :x: | :x: | :x: | - | - | +| HIP (clang) | - | - | - | :x: | :x: | :x: | :x: | :x: | :x: | :white_check_mark: (HIP 6.0 - 6.1) | :white_check_mark: (HIP 6.2) | :x: | :x: | - | - | +| SYCL | :x: | :x: | :x: | :x: | :x: | :x: | :x: | :x: | :x: | :x: | :x: | :x: | :white_check_mark: [^2] | - | :x: | Other compilers or combinations marked with :x: in the table above may work but are not tested in CI and are therefore not explicitly supported. [^1]: Due to an [LLVM bug](https://github.com/llvm/llvm-project/issues/58491) in debug mode only release builds are supported. -[^2]: Due to a [CUDA bug](https://github.com/alpaka-group/alpaka/issues/2035) debug builds are only supported for CUDA versions >= 11.7. -[^3]: Due to an [`icpx` bug](https://github.com/intel/llvm/issues/10711) the OpenMP back-ends cannot be used together with the SYCL back-end. -[^4]: Currently, the unit tests are compiled but not executed. +[^2]: Currently, the unit tests are compiled but not executed. Dependencies ------------ diff --git a/benchmarks/CMakeLists.txt b/benchmarks/CMakeLists.txt index 6a8da0ef7a89..d27b858f39a0 100644 --- a/benchmarks/CMakeLists.txt +++ b/benchmarks/CMakeLists.txt @@ -7,7 +7,7 @@ # Required CMake version. ################################################################################ -cmake_minimum_required(VERSION 3.22) +cmake_minimum_required(VERSION 3.25) project("alpakaBenchmarks" LANGUAGES CXX) diff --git a/benchmarks/babelstream/CMakeLists.txt b/benchmarks/babelstream/CMakeLists.txt index 5deb1a3e2a88..2e18ddcdfb1a 100644 --- a/benchmarks/babelstream/CMakeLists.txt +++ b/benchmarks/babelstream/CMakeLists.txt @@ -3,7 +3,7 @@ # SPDX-License-Identifier: ISC # -cmake_minimum_required(VERSION 3.22) +cmake_minimum_required(VERSION 3.25) set_property(GLOBAL PROPERTY USE_FOLDERS ON) project(babelstream LANGUAGES CXX) diff --git a/cmake/alpakaCommon.cmake b/cmake/alpakaCommon.cmake index 09872beca68e..06590a84a17e 100644 --- a/cmake/alpakaCommon.cmake +++ b/cmake/alpakaCommon.cmake @@ -114,14 +114,14 @@ endif() set(alpaka_DEBUG "0" CACHE STRING "Debug level") set_property(CACHE alpaka_DEBUG PROPERTY STRINGS "0;1;2") -set(alpaka_CXX_STANDARD_DEFAULT "17") +set(alpaka_CXX_STANDARD_DEFAULT "20") # Check whether alpaka_CXX_STANDARD has already been defined as a non-cached variable. if(DEFINED alpaka_CXX_STANDARD) set(alpaka_CXX_STANDARD_DEFAULT ${alpaka_CXX_STANDARD}) endif() set(alpaka_CXX_STANDARD ${alpaka_CXX_STANDARD_DEFAULT} CACHE STRING "C++ standard version") -set_property(CACHE alpaka_CXX_STANDARD PROPERTY STRINGS "17;20") +set_property(CACHE alpaka_CXX_STANDARD PROPERTY STRINGS "20") if(NOT TARGET alpaka) add_library(alpaka INTERFACE) @@ -219,41 +219,6 @@ find_package(Boost ${_alpaka_BOOST_MIN_VER} REQUIRED target_link_libraries(alpaka INTERFACE Boost::headers) -if(alpaka_ACC_CPU_B_SEQ_T_SEQ_ENABLE OR - alpaka_ACC_CPU_B_SEQ_T_THREADS_ENABLE OR - alpaka_ACC_CPU_B_TBB_T_SEQ_ENABLE OR - alpaka_ACC_CPU_B_OMP2_T_SEQ_ENABLE OR - alpaka_ACC_CPU_B_SEQ_T_OMP2_ENABLE) - - if(NOT alpaka_ACC_CPU_DISABLE_ATOMIC_REF) - # Check for C++20 std::atomic_ref first - if(${alpaka_CXX_STANDARD} VERSION_GREATER_EQUAL "20") - try_compile(alpaka_HAS_STD_ATOMIC_REF # Result stored here - "${PROJECT_BINARY_DIR}/alpakaFeatureTests" # Binary directory for output file - SOURCES "${_alpaka_FEATURE_TESTS_DIR}/StdAtomicRef.cpp" # Source file - CXX_STANDARD 20 - CXX_STANDARD_REQUIRED TRUE - CXX_EXTENSIONS FALSE) - if(alpaka_HAS_STD_ATOMIC_REF AND (NOT alpaka_ACC_CPU_DISABLE_ATOMIC_REF)) - message(STATUS "std::atomic_ref found") - target_compile_definitions(alpaka INTERFACE ALPAKA_HAS_STD_ATOMIC_REF) - else() - message(STATUS "std::atomic_ref NOT found") - endif() - endif() - - if(Boost_ATOMIC_FOUND AND (NOT alpaka_HAS_STD_ATOMIC_REF)) - message(STATUS "boost::atomic_ref found") - target_link_libraries(alpaka INTERFACE Boost::atomic) - endif() - endif() - - if(alpaka_ACC_CPU_DISABLE_ATOMIC_REF OR ((NOT alpaka_HAS_STD_ATOMIC_REF) AND (NOT Boost_ATOMIC_FOUND))) - message(STATUS "atomic_ref was not found or manually disabled. Falling back to lock-based CPU atomics.") - target_compile_definitions(alpaka INTERFACE ALPAKA_DISABLE_ATOMIC_ATOMICREF) - endif() -endif() - if(${alpaka_DEBUG} GREATER 1) message(STATUS "Boost in:") cmake_print_variables(BOOST_ROOT) @@ -468,10 +433,6 @@ if(alpaka_ACC_GPU_CUDA_ENABLE) elseif(CMAKE_CUDA_COMPILER_ID STREQUAL "NVIDIA") message(STATUS "nvcc is used as CUDA compiler") - if(alpaka_CXX_STANDARD GREATER_EQUAL 20 AND CMAKE_VERSION VERSION_LESS "3.25.0") - message(FATAL_ERROR "CMake 3.24 and older does not support C++20 for nvcc") - endif() - # nvcc sets no linux/__linux macros on OpenPOWER linux # nvidia bug id: 2448610 if(CMAKE_SYSTEM_NAME STREQUAL "Linux") @@ -483,7 +444,7 @@ if(alpaka_ACC_GPU_CUDA_ENABLE) if(alpaka_CUDA_EXPT_EXTENDED_LAMBDA STREQUAL ON) alpaka_set_compiler_options(DEVICE target alpaka "$<$:SHELL:--extended-lambda>") endif() - # This is mandatory because with C++17 many standard library functions we rely on are constexpr (std::min, std::multiplies, ...) + # This is mandatory because with C++20 many standard library functions we rely on are constexpr (std::min, std::multiplies, ...) alpaka_set_compiler_options(DEVICE target alpaka "$<$:SHELL:--expt-relaxed-constexpr>") # CMake automatically sets '-g' in debug mode diff --git a/docs/source/basic/example.rst b/docs/source/basic/example.rst index 6903d866982e..da6ba3f53ce1 100644 --- a/docs/source/basic/example.rst +++ b/docs/source/basic/example.rst @@ -26,7 +26,7 @@ The following example shows a minimal example of a ``CMakeLists.txt`` that uses .. code-block:: cmake :caption: CMakeLists.txt - cmake_minimum_required(VERSION 3.22) + cmake_minimum_required(VERSION 3.25) project("myexample" CXX) find_package(alpaka REQUIRED) @@ -55,7 +55,7 @@ The ``add_subdirectory`` method does not require alpaka to be installed. Instead .. code-block:: cmake :caption: CMakeLists.txt - cmake_minimum_required(VERSION 3.22) + cmake_minimum_required(VERSION 3.25) project("myexample" CXX) add_subdirectory(thirdParty/alpaka) diff --git a/docs/source/basic/install.rst b/docs/source/basic/install.rst index bfdb241c8975..e3e8161c54d1 100644 --- a/docs/source/basic/install.rst +++ b/docs/source/basic/install.rst @@ -108,7 +108,7 @@ If user is going to create her/his own project/example outside the source tree a .. code-block:: # Clone alpaka from github.com - git clone --branch 1.1.0 https://github.com/alpaka-group/alpaka.git + git clone --branch 1.2.0 https://github.com/alpaka-group/alpaka.git cd alpaka mkdir build && cd build cmake -DCMAKE_INSTALL_PREFIX=/install/ .. diff --git a/docs/source/basic/library.rst b/docs/source/basic/library.rst index ab73d7163b24..7ebc551c8c5f 100644 --- a/docs/source/basic/library.rst +++ b/docs/source/basic/library.rst @@ -4,7 +4,7 @@ Library Interface As described in the chapter about the :doc:`Abstraction `, the general design of the library is very similar to *CUDA* and *OpenCL* but extends both by some points, while not requiring any language extensions. General interface design as well as interface implementation decisions differentiating *alpaka* from those libraries are described in the Rationale section. It uses C++ because it is one of the most performant languages available on nearly all systems. -Furthermore, C++17 allows to describe the concepts in a very abstract way that is not possible with many other languages. +Furthermore, C++20 allows to describe the concepts in a very abstract way that is not possible with many other languages. The *alpaka* library extensively makes use of advanced functional C++ template meta-programming techniques. The Implementation Details section discusses the C++ library and the way it provides extensibility and optimizability. diff --git a/docs/source/conf.py b/docs/source/conf.py index 3b43daca3c72..123516ac12a5 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -123,7 +123,7 @@ "alpaka", "Abstraction Library for Parallel Kernel Acceleration", """ - The alpaka library is a header-only C++17 abstraction library for + The alpaka library is a header-only C++20 abstraction library for accelerator development. Its aim is to provide performance portability across accelerators through the abstraction (not hiding!) of the underlying levels of parallelism. diff --git a/docs/source/dev/details.rst b/docs/source/dev/details.rst index d9ecb74807fc..fe5010124138 100644 --- a/docs/source/dev/details.rst +++ b/docs/source/dev/details.rst @@ -181,7 +181,7 @@ This functionality can be accessed by the corresponding ``alpaka::enqueue`` and Currently there is no native language support for describing and checking concepts in C++ at compile time. A study group (SG8) is working on the ISO `specification for concepts `_ and compiler forks implementing them do exist. -For usage in current C++ there are libraries like `Boost.ConceptCheck `_ which try to emulate requirement checking of concept types. +For usage in current C++ there are libraries like `Boost.ConceptCheck `_ which try to emulate requirement checking of concept types. Those libraries often exploit the preprocessor and require non-trivial changes to the function declaration syntax. Therefore the *alpaka* library does not currently make use of *Boost.ConceptCheck*. Neither does it facilitate the proposed concept specification due to its dependency on non-standard compilers. diff --git a/docs/source/index.rst b/docs/source/index.rst index 88151199d263..6e86fe0871b2 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -10,7 +10,7 @@ *alpaka - An Abstraction Library for Parallel Kernel Acceleration* -The alpaka library is a header-only C++17 abstraction library for accelerator development. +The alpaka library is a header-only C++20 abstraction library for accelerator development. Its aim is to provide performance portability across accelerators through the abstraction (not hiding!) of the underlying levels of parallelism. .. CAUTION:: diff --git a/example/CMakeLists.txt b/example/CMakeLists.txt index 4d3ae6a1e0fa..541bb7201cd1 100644 --- a/example/CMakeLists.txt +++ b/example/CMakeLists.txt @@ -7,7 +7,7 @@ # Required CMake version. ################################################################################ -cmake_minimum_required(VERSION 3.22) +cmake_minimum_required(VERSION 3.25) project("alpakaExamples" LANGUAGES CXX) diff --git a/example/bufferCopy/CMakeLists.txt b/example/bufferCopy/CMakeLists.txt index b0a6025a51fb..76d97b8ad8dd 100644 --- a/example/bufferCopy/CMakeLists.txt +++ b/example/bufferCopy/CMakeLists.txt @@ -6,7 +6,7 @@ ################################################################################ # Required CMake version. -cmake_minimum_required(VERSION 3.22) +cmake_minimum_required(VERSION 3.25) set_property(GLOBAL PROPERTY USE_FOLDERS ON) diff --git a/example/complex/CMakeLists.txt b/example/complex/CMakeLists.txt index f04dddc22ea2..4fb332461919 100644 --- a/example/complex/CMakeLists.txt +++ b/example/complex/CMakeLists.txt @@ -6,7 +6,7 @@ ################################################################################ # Required CMake version. -cmake_minimum_required(VERSION 3.22) +cmake_minimum_required(VERSION 3.25) set_property(GLOBAL PROPERTY USE_FOLDERS ON) diff --git a/example/conv2DWithMdspan/CMakeLists.txt b/example/conv2DWithMdspan/CMakeLists.txt index 50e5c765ab75..e64c40e68df8 100644 --- a/example/conv2DWithMdspan/CMakeLists.txt +++ b/example/conv2DWithMdspan/CMakeLists.txt @@ -6,7 +6,7 @@ ################################################################################ # Required CMake version. -cmake_minimum_required(VERSION 3.22) +cmake_minimum_required(VERSION 3.25) set_property(GLOBAL PROPERTY USE_FOLDERS ON) diff --git a/example/convolution1D/CMakeLists.txt b/example/convolution1D/CMakeLists.txt index a43a172175e8..62384ecfa64e 100644 --- a/example/convolution1D/CMakeLists.txt +++ b/example/convolution1D/CMakeLists.txt @@ -6,7 +6,7 @@ ################################################################################ # Required CMake version. -cmake_minimum_required(VERSION 3.22) +cmake_minimum_required(VERSION 3.25) set_property(GLOBAL PROPERTY USE_FOLDERS ON) diff --git a/example/convolution2D/CMakeLists.txt b/example/convolution2D/CMakeLists.txt index 2324f7b8ef2f..250460b553b7 100644 --- a/example/convolution2D/CMakeLists.txt +++ b/example/convolution2D/CMakeLists.txt @@ -6,7 +6,7 @@ ################################################################################ # Required CMake version. -cmake_minimum_required(VERSION 3.22) +cmake_minimum_required(VERSION 3.25) set_property(GLOBAL PROPERTY USE_FOLDERS ON) diff --git a/example/counterBasedRng/CMakeLists.txt b/example/counterBasedRng/CMakeLists.txt index dd322b8b8ca7..c8df7f683e72 100644 --- a/example/counterBasedRng/CMakeLists.txt +++ b/example/counterBasedRng/CMakeLists.txt @@ -6,7 +6,7 @@ ################################################################################ # Required CMake version. -cmake_minimum_required(VERSION 3.22) +cmake_minimum_required(VERSION 3.25) set_property(GLOBAL PROPERTY USE_FOLDERS ON) diff --git a/example/heatEquation/CMakeLists.txt b/example/heatEquation/CMakeLists.txt index e6955052830b..a3684696fcb5 100644 --- a/example/heatEquation/CMakeLists.txt +++ b/example/heatEquation/CMakeLists.txt @@ -6,7 +6,7 @@ ################################################################################ # Required CMake version. -cmake_minimum_required(VERSION 3.22) +cmake_minimum_required(VERSION 3.25) set_property(GLOBAL PROPERTY USE_FOLDERS ON) diff --git a/example/heatEquation2D/CMakeLists.txt b/example/heatEquation2D/CMakeLists.txt index ab9c5fe65d69..e3cf0bc79bac 100644 --- a/example/heatEquation2D/CMakeLists.txt +++ b/example/heatEquation2D/CMakeLists.txt @@ -6,7 +6,7 @@ ################################################################################ # Required CMake version. -cmake_minimum_required(VERSION 3.22) +cmake_minimum_required(VERSION 3.25) set_property(GLOBAL PROPERTY USE_FOLDERS ON) diff --git a/example/helloWorld/CMakeLists.txt b/example/helloWorld/CMakeLists.txt index 10f400b94361..1133c9ad7353 100644 --- a/example/helloWorld/CMakeLists.txt +++ b/example/helloWorld/CMakeLists.txt @@ -6,7 +6,7 @@ ################################################################################ # Required CMake version. -cmake_minimum_required(VERSION 3.22) +cmake_minimum_required(VERSION 3.25) set_property(GLOBAL PROPERTY USE_FOLDERS ON) diff --git a/example/helloWorldLambda/CMakeLists.txt b/example/helloWorldLambda/CMakeLists.txt index e0ab7b6fc801..69dc39ab6bca 100644 --- a/example/helloWorldLambda/CMakeLists.txt +++ b/example/helloWorldLambda/CMakeLists.txt @@ -6,7 +6,7 @@ ################################################################################ # Required CMake version. -cmake_minimum_required(VERSION 3.22) +cmake_minimum_required(VERSION 3.25) set_property(GLOBAL PROPERTY USE_FOLDERS ON) diff --git a/example/kernelSpecialization/CMakeLists.txt b/example/kernelSpecialization/CMakeLists.txt index 0b84f1e52ee7..01cdfe81f86b 100644 --- a/example/kernelSpecialization/CMakeLists.txt +++ b/example/kernelSpecialization/CMakeLists.txt @@ -6,7 +6,7 @@ ################################################################################ # Required CMake version. -cmake_minimum_required(VERSION 3.22) +cmake_minimum_required(VERSION 3.25) set_property(GLOBAL PROPERTY USE_FOLDERS ON) diff --git a/example/ls/CMakeLists.txt b/example/ls/CMakeLists.txt index f3034cd1673e..9d9fc46536ec 100644 --- a/example/ls/CMakeLists.txt +++ b/example/ls/CMakeLists.txt @@ -1,7 +1,7 @@ # Copyright 2023 Bernhard Manfred Gruber # SPDX-License-Identifier: ISC -cmake_minimum_required(VERSION 3.22) +cmake_minimum_required(VERSION 3.25) set_property(GLOBAL PROPERTY USE_FOLDERS ON) project(alpaka-ls LANGUAGES CXX) diff --git a/example/matrixMulWithMdspan/CMakeLists.txt b/example/matrixMulWithMdspan/CMakeLists.txt index 7fa21254c08b..4a526793f2f8 100644 --- a/example/matrixMulWithMdspan/CMakeLists.txt +++ b/example/matrixMulWithMdspan/CMakeLists.txt @@ -6,7 +6,7 @@ ################################################################################ # Required CMake version. -cmake_minimum_required(VERSION 3.22) +cmake_minimum_required(VERSION 3.25) set_property(GLOBAL PROPERTY USE_FOLDERS ON) diff --git a/example/monteCarloIntegration/CMakeLists.txt b/example/monteCarloIntegration/CMakeLists.txt index 474d0c905af4..1786757823c3 100644 --- a/example/monteCarloIntegration/CMakeLists.txt +++ b/example/monteCarloIntegration/CMakeLists.txt @@ -6,7 +6,7 @@ ################################################################################ # Required CMake version. -cmake_minimum_required(VERSION 3.22) +cmake_minimum_required(VERSION 3.25) set_property(GLOBAL PROPERTY USE_FOLDERS ON) diff --git a/example/openMPSchedule/CMakeLists.txt b/example/openMPSchedule/CMakeLists.txt index 74f64581b3fa..016cf823e69e 100644 --- a/example/openMPSchedule/CMakeLists.txt +++ b/example/openMPSchedule/CMakeLists.txt @@ -6,7 +6,7 @@ ################################################################################ # Required CMake version. -cmake_minimum_required(VERSION 3.22) +cmake_minimum_required(VERSION 3.25) set_property(GLOBAL PROPERTY USE_FOLDERS ON) diff --git a/example/parallelLoopPatterns/CMakeLists.txt b/example/parallelLoopPatterns/CMakeLists.txt index f2b6d91bcab4..ecd02d3f09eb 100644 --- a/example/parallelLoopPatterns/CMakeLists.txt +++ b/example/parallelLoopPatterns/CMakeLists.txt @@ -6,7 +6,7 @@ ################################################################################ # Required CMake version. -cmake_minimum_required(VERSION 3.22) +cmake_minimum_required(VERSION 3.25) set_property(GLOBAL PROPERTY USE_FOLDERS ON) diff --git a/example/randomCells2D/CMakeLists.txt b/example/randomCells2D/CMakeLists.txt index af4bee1014e9..e690d7cb9d7b 100644 --- a/example/randomCells2D/CMakeLists.txt +++ b/example/randomCells2D/CMakeLists.txt @@ -6,7 +6,7 @@ ################################################################################ # Required CMake version. -cmake_minimum_required(VERSION 3.22) +cmake_minimum_required(VERSION 3.25) set_property(GLOBAL PROPERTY USE_FOLDERS ON) diff --git a/example/randomStrategies/CMakeLists.txt b/example/randomStrategies/CMakeLists.txt index 3a6e279cd047..7df8d95867e8 100644 --- a/example/randomStrategies/CMakeLists.txt +++ b/example/randomStrategies/CMakeLists.txt @@ -6,7 +6,7 @@ ################################################################################ # Required CMake version. -cmake_minimum_required(VERSION 3.22) +cmake_minimum_required(VERSION 3.25) set_property(GLOBAL PROPERTY USE_FOLDERS ON) diff --git a/example/reduce/CMakeLists.txt b/example/reduce/CMakeLists.txt index 4946465e89c8..82f227be288e 100644 --- a/example/reduce/CMakeLists.txt +++ b/example/reduce/CMakeLists.txt @@ -6,7 +6,7 @@ ################################################################################ # Required CMake version. -cmake_minimum_required(VERSION 3.22) +cmake_minimum_required(VERSION 3.25) set_property(GLOBAL PROPERTY USE_FOLDERS ON) diff --git a/example/tagSpecialization/CMakeLists.txt b/example/tagSpecialization/CMakeLists.txt index 761d1ee13062..c57bad523ba9 100644 --- a/example/tagSpecialization/CMakeLists.txt +++ b/example/tagSpecialization/CMakeLists.txt @@ -6,7 +6,7 @@ # ############################################################################### # Required CMake version. -cmake_minimum_required(VERSION 3.22) +cmake_minimum_required(VERSION 3.25) set_property(GLOBAL PROPERTY USE_FOLDERS ON) diff --git a/example/vectorAdd/CMakeLists.txt b/example/vectorAdd/CMakeLists.txt index 2cd29f99301f..3bf668d18f36 100644 --- a/example/vectorAdd/CMakeLists.txt +++ b/example/vectorAdd/CMakeLists.txt @@ -6,7 +6,7 @@ ################################################################################ # Required CMake version. -cmake_minimum_required(VERSION 3.22) +cmake_minimum_required(VERSION 3.25) set_property(GLOBAL PROPERTY USE_FOLDERS ON) diff --git a/include/alpaka/atomic/AtomicAtomicRef.hpp b/include/alpaka/atomic/AtomicAtomicRef.hpp index 61b825c1a0e2..6755ec82c719 100644 --- a/include/alpaka/atomic/AtomicAtomicRef.hpp +++ b/include/alpaka/atomic/AtomicAtomicRef.hpp @@ -11,24 +11,8 @@ #include #include -#ifndef ALPAKA_DISABLE_ATOMIC_ATOMICREF -# ifndef ALPAKA_HAS_STD_ATOMIC_REF -# include -# endif - namespace alpaka { - namespace detail - { -# if defined(ALPAKA_HAS_STD_ATOMIC_REF) - template - using atomic_ref = std::atomic_ref; -# else - template - using atomic_ref = boost::atomic_ref; -# endif - } // namespace detail - //! The atomic ops based on atomic_ref for CPU accelerators. // // Atomics can be used in the grids, blocks and threads hierarchy levels. @@ -42,7 +26,7 @@ namespace alpaka void isSupportedByAtomicAtomicRef() { static_assert( - std::is_trivially_copyable_v && alpaka::detail::atomic_ref::required_alignment <= alignof(T), + std::is_trivially_copyable_v && std::atomic_ref::required_alignment <= alignof(T), "Type not supported by AtomicAtomicRef, please recompile defining " "ALPAKA_DISABLE_ATOMIC_ATOMICREF."); } @@ -56,7 +40,7 @@ namespace alpaka ALPAKA_FN_HOST static auto atomicOp(AtomicAtomicRef const&, T* const addr, T const& value) -> T { isSupportedByAtomicAtomicRef(); - alpaka::detail::atomic_ref ref(*addr); + std::atomic_ref ref(*addr); return ref.fetch_add(value); } }; @@ -68,7 +52,7 @@ namespace alpaka ALPAKA_FN_HOST static auto atomicOp(AtomicAtomicRef const&, T* const addr, T const& value) -> T { isSupportedByAtomicAtomicRef(); - alpaka::detail::atomic_ref ref(*addr); + std::atomic_ref ref(*addr); return ref.fetch_sub(value); } }; @@ -80,7 +64,7 @@ namespace alpaka ALPAKA_FN_HOST static auto atomicOp(AtomicAtomicRef const&, T* const addr, T const& value) -> T { isSupportedByAtomicAtomicRef(); - alpaka::detail::atomic_ref ref(*addr); + std::atomic_ref ref(*addr); T old = ref; T result = old; result = std::min(result, value); @@ -100,7 +84,7 @@ namespace alpaka ALPAKA_FN_HOST static auto atomicOp(AtomicAtomicRef const&, T* const addr, T const& value) -> T { isSupportedByAtomicAtomicRef(); - alpaka::detail::atomic_ref ref(*addr); + std::atomic_ref ref(*addr); T old = ref; T result = old; result = std::max(result, value); @@ -120,7 +104,7 @@ namespace alpaka ALPAKA_FN_HOST static auto atomicOp(AtomicAtomicRef const&, T* const addr, T const& value) -> T { isSupportedByAtomicAtomicRef(); - alpaka::detail::atomic_ref ref(*addr); + std::atomic_ref ref(*addr); T old = ref; T result = value; while(!ref.compare_exchange_weak(old, result)) @@ -138,7 +122,7 @@ namespace alpaka ALPAKA_FN_HOST static auto atomicOp(AtomicAtomicRef const&, T* const addr, T const& value) -> T { isSupportedByAtomicAtomicRef(); - alpaka::detail::atomic_ref ref(*addr); + std::atomic_ref ref(*addr); T old = ref; T result = ((old >= value) ? 0 : static_cast(old + 1)); while(!ref.compare_exchange_weak(old, result)) @@ -156,7 +140,7 @@ namespace alpaka ALPAKA_FN_HOST static auto atomicOp(AtomicAtomicRef const&, T* const addr, T const& value) -> T { isSupportedByAtomicAtomicRef(); - alpaka::detail::atomic_ref ref(*addr); + std::atomic_ref ref(*addr); T old = ref; T result = ((old >= value) ? 0 : static_cast(old - 1)); while(!ref.compare_exchange_weak(old, result)) @@ -174,7 +158,7 @@ namespace alpaka ALPAKA_FN_HOST static auto atomicOp(AtomicAtomicRef const&, T* const addr, T const& value) -> T { isSupportedByAtomicAtomicRef(); - alpaka::detail::atomic_ref ref(*addr); + std::atomic_ref ref(*addr); return ref.fetch_and(value); } }; @@ -186,7 +170,7 @@ namespace alpaka ALPAKA_FN_HOST static auto atomicOp(AtomicAtomicRef const&, T* const addr, T const& value) -> T { isSupportedByAtomicAtomicRef(); - alpaka::detail::atomic_ref ref(*addr); + std::atomic_ref ref(*addr); return ref.fetch_or(value); } }; @@ -198,7 +182,7 @@ namespace alpaka ALPAKA_FN_HOST static auto atomicOp(AtomicAtomicRef const&, T* const addr, T const& value) -> T { isSupportedByAtomicAtomicRef(); - alpaka::detail::atomic_ref ref(*addr); + std::atomic_ref ref(*addr); return ref.fetch_xor(value); } }; @@ -214,24 +198,22 @@ namespace alpaka T const& value) -> T { isSupportedByAtomicAtomicRef(); - alpaka::detail::atomic_ref ref(*addr); + std::atomic_ref ref(*addr); T old = ref; T result; do { -# if BOOST_COMP_GNUC || BOOST_COMP_CLANG -# pragma GCC diagnostic push -# pragma GCC diagnostic ignored "-Wfloat-equal" -# endif +#if BOOST_COMP_GNUC || BOOST_COMP_CLANG +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wfloat-equal" +#endif result = ((old == compare) ? value : old); -# if BOOST_COMP_GNUC || BOOST_COMP_CLANG -# pragma GCC diagnostic pop -# endif +#if BOOST_COMP_GNUC || BOOST_COMP_CLANG +# pragma GCC diagnostic pop +#endif } while(!ref.compare_exchange_weak(old, result)); return old; } }; } // namespace trait } // namespace alpaka - -#endif diff --git a/script/gitlabci/job_analysis.yml b/script/gitlabci/job_analysis.yml index 7cd1695d9351..623b346e28fd 100644 --- a/script/gitlabci/job_analysis.yml +++ b/script/gitlabci/job_analysis.yml @@ -8,7 +8,7 @@ linux_clang-14_debug_analysis: CMAKE_BUILD_TYPE: Debug ALPAKA_BOOST_VERSION: 1.80.0 ALPAKA_CI_CMAKE_VER: 3.23.5 - alpaka_CXX_STANDARD: 17 + alpaka_CXX_STANDARD: 20 ALPAKA_CI_ANALYSIS: "ON" alpaka_DEBUG: 2 alpaka_ACC_CPU_B_TBB_T_SEQ_ENABLE: "OFF" diff --git a/script/gitlabci/job_clang.yml b/script/gitlabci/job_clang.yml index 9aed3dd163ed..b510d17b18c0 100644 --- a/script/gitlabci/job_clang.yml +++ b/script/gitlabci/job_clang.yml @@ -9,7 +9,7 @@ linux_clang-11_release: ALPAKA_BOOST_VERSION: 1.75.0 ALPAKA_CI_CMAKE_VER: 3.22.6 CMAKE_CXX_EXTENSIONS: "OFF" - alpaka_CXX_STANDARD: 17 + alpaka_CXX_STANDARD: 20 linux_clang-14_debug: extends: .base_clang @@ -19,7 +19,7 @@ linux_clang-14_debug: CMAKE_BUILD_TYPE: Debug ALPAKA_BOOST_VERSION: 1.80.0 ALPAKA_CI_CMAKE_VER: 3.23.5 - alpaka_CXX_STANDARD: 17 + alpaka_CXX_STANDARD: 20 linux_clang-16_relwithdebinfo_asan_c++20: extends: .base_clang diff --git a/script/gitlabci/job_cuda.yml b/script/gitlabci/job_cuda.yml index 3da01c534659..97bc2e139b79 100644 --- a/script/gitlabci/job_cuda.yml +++ b/script/gitlabci/job_cuda.yml @@ -11,7 +11,7 @@ linux_nvcc12.0_gcc11_debug_relocatable_device_code_compile_only: CMAKE_BUILD_TYPE: Debug ALPAKA_BOOST_VERSION: 1.81.0 ALPAKA_CI_CMAKE_VER: 3.26.5 - alpaka_CXX_STANDARD: 17 + alpaka_CXX_STANDARD: 20 alpaka_RELOCATABLE_DEVICE_CODE: "ON" linux_nvcc12.0_gcc11_release_extended_lambda_off_compile_only: @@ -24,6 +24,6 @@ linux_nvcc12.0_gcc11_release_extended_lambda_off_compile_only: CMAKE_BUILD_TYPE: Release ALPAKA_BOOST_VERSION: 1.82.0 ALPAKA_CI_CMAKE_VER: 3.27.1 - alpaka_CXX_STANDARD: 17 + alpaka_CXX_STANDARD: 20 alpaka_ACC_GPU_CUDA_ENABLE: "ON" alpaka_CUDA_EXPT_EXTENDED_LAMBDA: "OFF" diff --git a/script/job_generator/versions.py b/script/job_generator/versions.py index 05cc87a11c93..573767fffd4b 100644 --- a/script/job_generator/versions.py +++ b/script/job_generator/versions.py @@ -11,16 +11,9 @@ sw_versions: Dict[str, List[str]] = { - GCC: ["9", "10", "11", "12", "13"], - CLANG: ["9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19"], + GCC: ["10", "11", "12", "13"], + CLANG: ["10", "11", "12", "13", "14", "15", "16", "17", "18", "19"], NVCC: [ - "11.2", - "11.3", - "11.4", - "11.5", - "11.6", - "11.7", - "11.8", "12.0", "12.1", "12.2", @@ -29,7 +22,7 @@ "12.5", "12.6", ], - HIPCC: ["5.1", "5.2", "5.3", "5.4", "5.5", "5.6", "5.7", "6.0", "6.1", "6.2"], + HIPCC: ["6.0", "6.1", "6.2"], ICPX: ["2024.2"], # Contains all enabled back-ends. # There are special cases for ALPAKA_ACC_GPU_CUDA_ENABLE and ALPAKA_ACC_GPU_HIP_ENABLE @@ -75,7 +68,7 @@ ], ], UBUNTU: ["20.04"], - CMAKE: ["3.22.6", "3.23.5", "3.24.4", "3.25.3", "3.26.4", "3.27.9", "3.28.6", "3.29.8", "3.30.3"], + CMAKE: ["3.25.3", "3.26.4", "3.27.9", "3.28.6", "3.29.8", "3.30.3"], BOOST: [ "1.74.0", "1.75.0", @@ -91,7 +84,7 @@ "1.85.0", "1.86.0", ], - CXX_STANDARD: ["17", "20"], + CXX_STANDARD: ["20"], BUILD_TYPE: BUILD_TYPES, # use only TEST_COMPILE_ONLY, because TEST_RUNTIME will be set manually depend on some # conditions later diff --git a/script/readme_generator/supported_compilers.json b/script/readme_generator/supported_compilers.json index a455f26f7be7..1fff43da4f37 100644 --- a/script/readme_generator/supported_compilers.json +++ b/script/readme_generator/supported_compilers.json @@ -1,34 +1,4 @@ { - "gcc 9.5 (Linux)": { - "serial": { - "state": "yes" - }, - "OMPblock": { - "state": "yes" - }, - "OMPthread": { - "state": "yes" - }, - "thread": { - "state": "yes" - }, - "tbb": { - "state": "yes" - }, - "CUDAnvcc": { - "state": "yes", - "comment": "(CUDA 11.2 - 12.5)[^2]" - }, - "CUDAclang": { - "state": "none" - }, - "hip": { - "state": "none" - }, - "sycl": { - "state": "no" - } - }, "gcc 10.4 / 11.1 (Linux)": { "serial": { "state": "yes" @@ -47,7 +17,7 @@ }, "CUDAnvcc": { "state": "yes", - "comment": "(CUDA 11.4 - 12.0)[^2]" + "comment": "(CUDA 12.0)" }, "CUDAclang": { "state": "none" @@ -119,36 +89,6 @@ "state": "no" } }, - "clang 9 (Linux)": { - "serial": { - "state": "yes" - }, - "OMPblock": { - "state": "yes" - }, - "OMPthread": { - "state": "yes" - }, - "thread": { - "state": "yes" - }, - "tbb": { - "state": "yes" - }, - "CUDAnvcc": { - "state": "yes", - "comment": "(CUDA 11.6 - 12.0)[^2]" - }, - "CUDAclang": { - "state": "no" - }, - "hip": { - "state": "no" - }, - "sycl": { - "state": "no" - } - }, "clang 10/11 (Linux)": { "serial": { "state": "yes" @@ -167,7 +107,7 @@ }, "CUDAnvcc": { "state": "yes", - "comment": "(CUDA 11.2, 11.6 - 12.0)[^2]" + "comment": "(CUDA 12.0)" }, "CUDAclang": { "state": "no" @@ -197,7 +137,7 @@ }, "CUDAnvcc": { "state": "yes", - "comment": "(CUDA 11.6 - 12.0)[^2]" + "comment": "(CUDA 12.0)" }, "CUDAclang": { "state": "no" @@ -227,7 +167,7 @@ }, "CUDAnvcc": { "state": "yes", - "comment": "(CUDA 11.7 - 12.0)" + "comment": "(CUDA 12.0)" }, "CUDAclang": { "state": "no" @@ -257,15 +197,13 @@ }, "CUDAnvcc": { "state": "yes", - "comment": "(CUDA 11.8 - 12.0)" + "comment": "(CUDA 12.0)" }, "CUDAclang": { - "state": "yes", - "comment": "(CUDA 11.2 - 11.5)" + "state": "no" }, "hip": { - "state": "yes", - "comment": "(HIP 5.1 - 5.2)" + "state": "no" }, "sycl": { "state": "no" @@ -292,12 +230,10 @@ "comment": "(CUDA 12.2)" }, "CUDAclang": { - "state": "yes", - "comment": "(CUDA 11.2 - 11.5)" + "state": "no" }, "hip": { - "state": "yes", - "comment": "(HIP 5.3 - 5.4)" + "state": "no" }, "sycl": { "state": "no" @@ -324,12 +260,10 @@ "comment": "(CUDA 12.3)" }, "CUDAclang": { - "state": "yes", - "comment": "(CUDA 11.2 - 11.5)" + "state": "no" }, "hip": { - "state": "yes", - "comment": "(HIP 5.5 - 5.6)" + "state": "no" }, "sycl": { "state": "no" @@ -356,12 +290,11 @@ "comment": "(CUDA 12.4 - 12.5)" }, "CUDAclang": { - "state": "yes", - "comment": "(CUDA 11.2 - 11.8)" + "state": "no" }, "hip": { "state": "yes", - "comment": "(HIP 5.7 - 6.1)" + "comment": "(HIP 6.0 - 6.1)" }, "sycl": { "state": "no" @@ -456,7 +389,7 @@ }, "sycl": { "state": "yes", - "comment": "[^4]" + "comment": "[^2]" } }, "Xcode 13.2.1 / 14.2 / 14.3.1 (macOS)": { diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index be08194b4234..7a54a9ea357c 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -3,7 +3,7 @@ # SPDX-License-Identifier: MPL-2.0 # -cmake_minimum_required(VERSION 3.22) +cmake_minimum_required(VERSION 3.25) if(NOT TARGET alpaka::alpaka) list(APPEND CMAKE_MODULE_PATH "${alpaka_ROOT}") diff --git a/test/analysis/CMakeLists.txt b/test/analysis/CMakeLists.txt index 9d755b673898..4399712338f8 100644 --- a/test/analysis/CMakeLists.txt +++ b/test/analysis/CMakeLists.txt @@ -7,7 +7,7 @@ # Required CMake version. ################################################################################ -cmake_minimum_required(VERSION 3.22) +cmake_minimum_required(VERSION 3.25) project("alpakaAnalysisTest" LANGUAGES CXX) diff --git a/test/common/CMakeLists.txt b/test/common/CMakeLists.txt index 1f3df34b290a..000a7ff2a10b 100644 --- a/test/common/CMakeLists.txt +++ b/test/common/CMakeLists.txt @@ -3,7 +3,7 @@ # SPDX-License-Identifier: MPL-2.0 # -cmake_minimum_required(VERSION 3.22) +cmake_minimum_required(VERSION 3.25) set(_COMMON_TARGET_NAME "common") set(_COMMON_COMPILE_OPTIONS_FILE "devCompileOptions.cmake") diff --git a/test/integ/CMakeLists.txt b/test/integ/CMakeLists.txt index 3379fd38daa4..bb2a218d6c2a 100644 --- a/test/integ/CMakeLists.txt +++ b/test/integ/CMakeLists.txt @@ -7,7 +7,7 @@ # Required CMake version. ################################################################################ -cmake_minimum_required(VERSION 3.22) +cmake_minimum_required(VERSION 3.25) project("alpakaIntegTest" LANGUAGES CXX) diff --git a/test/unit/CMakeLists.txt b/test/unit/CMakeLists.txt index 983bb732abd6..f3ea6672d1a4 100644 --- a/test/unit/CMakeLists.txt +++ b/test/unit/CMakeLists.txt @@ -7,7 +7,7 @@ # Required CMake version. ################################################################################ -cmake_minimum_required(VERSION 3.22) +cmake_minimum_required(VERSION 3.25) ################################################################################ # Add subdirectories.