Skip to content

Commit

Permalink
Squashed 'include/alpaka/' changes from 955fa97..9dfdb96
Browse files Browse the repository at this point in the history
9dfdb96 fix missing OpenMP link flag
b9f099c fix foldrAll ICC bug
83ddac5 disable the OpenMP 4 back-end by default
8644064 fix Vec for Intel
819e5d9 fix boost 1.56 missing const bug
f9cd663 really fix Intel cpuid
330d983 remove incorrect docu
9f1b692 fix Intel compiler cpuid
1aa4c86 fix missing OMP_NUM_THREADS reset in getMaxOmpThreads
328e866 fix CUDA compilation
33c7888 remove ICC from the readme (untested / not compiling)
40a8465 always interpret all source files as .cu files for nvcc
25f4670 allow vectorize to be called without the element type
882c0a9 enhance documentation
05454a6 fix ambiguous template specialization for GetWorkDiv
5b70326 remove call to std::ref in BlockSharedAllocCudaBuiltIn
e15c40a fix fix AtomicOmpCritSec
afffe2f fix wrong atomic implementation for AccCpuOmp2Blocks
2a60bbb fix BufCudaRt destruction
062378d add ALPAKA_ADD_EXECUTABLE to alpakaConfig.cmake
b9a4125 use DimInt more consistently
919dc26 move ElemType from mem::view to elem
2807fc8 add initial ALPAKA_ADD_EXECUTABLE
f019e70 fix BufPlainPtrWrapper pitch
1ca1923 fix missing OpenMP linker flag
9ee231d fix getFreeGlobalMemSizeBytes
7e853c6 Merge pull request ComputationalRadiationPhysics#54 from psychocoderHPC/fix-cudaSet
6796eff Merge pull request ComputationalRadiationPhysics#55 from psychocoderHPC/fix-callingHostFunctionFromDevice
9f3d8e6 fix warning calling host function from device
000a250 fix wrong usage of `getPitchBytes<>()`
8be955d Merge pull request ComputationalRadiationPhysics#53 from psychocoderHPC/topic-suppressHostDeviceWarning
b7c877d Merge pull request ComputationalRadiationPhysics#52 from psychocoderHPC/tpoic-updateGitIgnore
0b94251 suppress host device warning
33a59be update `.gitignore`
237898f refactoring
d0ad945 implement getFreeGlobalMemSizeBytes
f85e233 allow accelerators to inherit from rand implementation
d96e8b5 fix CUDA set implemenentation

git-subtree-dir: include/alpaka
git-subtree-split: 9dfdb96b0cb2fc32a1f2e447de755905f7538bf4
  • Loading branch information
erikzenker committed Oct 5, 2015
1 parent 884eb56 commit 66f2e53
Show file tree
Hide file tree
Showing 96 changed files with 1,237 additions and 1,308 deletions.
13 changes: 13 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -2,3 +2,16 @@
!/doc/doxygen/Doxyfile
/doc/latex/*
**/build

# tmp files
*~

# netbeans project files
/nbproject/

# Code::Blocks project files
/*.cbp
/*.layout

# original backup files
*.orig
56 changes: 21 additions & 35 deletions .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ compiler:
# [clang++] ALPAKA_CLANG_VER : {3.5, 3.6, 3.7}
# [g++] ALPAKA_GCC_VER : {4.9, 5}
# ALPAKA_BOOST_BRANCH : {boost-1.56.0, boost-1.57.0, boost-1.58.0, boost-1.59.0, develop}
# ALPAKA_CMAKE_VER : {2.8.12.2, 3.0.2, 3.1.3, 3.2.2, 3.3.1}
# ALPAKA_CMAKE_VER : {3.3.0, 3.3.1, 3.3.2}
# CMAKE_BUILD_TYPE : {Debug, Release}
# ALPAKA_DEBUG : {0, 1, 2}
# ALPAKA_ACC_CPU_B_SEQ_T_SEQ_ENABLE : {ON, OFF}
Expand Down Expand Up @@ -73,28 +73,28 @@ env:
- ALPAKA_CLANG_LIBSTDCPP_VERSION=4.9

matrix:
- ALPAKA_CUDA_VERSION=7.0 ALPAKA_ANALYSIS=OFF ALPAKA_DEBUG=2 ALPAKA_CMAKE_VER=3.3.1 CMAKE_BUILD_TYPE=Debug OMP_NUM_THREADS=4 ALPAKA_GCC_VER=4.9 ALPAKA_CLANG_VER=3.6 ALPAKA_BOOST_BRANCH=boost-1.56.0 ALPAKA_ACC_GPU_CUDA_ENABLE=ON
- ALPAKA_CUDA_VERSION=7.0 ALPAKA_ANALYSIS=OFF ALPAKA_DEBUG=0 ALPAKA_CMAKE_VER=3.2.2 CMAKE_BUILD_TYPE=Debug OMP_NUM_THREADS=3 ALPAKA_GCC_VER=4.9 ALPAKA_CLANG_VER=3.5 ALPAKA_BOOST_BRANCH=boost-1.57.0 ALPAKA_ACC_GPU_CUDA_ENABLE=ON
- ALPAKA_CUDA_VERSION=7.0 ALPAKA_ANALYSIS=OFF ALPAKA_DEBUG=2 ALPAKA_CMAKE_VER=3.2.2 CMAKE_BUILD_TYPE=Debug OMP_NUM_THREADS=2 ALPAKA_GCC_VER=4.9 ALPAKA_CLANG_VER=3.6 ALPAKA_BOOST_BRANCH=boost-1.58.0 ALPAKA_ACC_GPU_CUDA_ENABLE=OFF
- ALPAKA_CUDA_VERSION=7.0 ALPAKA_ANALYSIS=ON ALPAKA_DEBUG=1 ALPAKA_CMAKE_VER=3.1.3 CMAKE_BUILD_TYPE=Debug OMP_NUM_THREADS=4 ALPAKA_GCC_VER=5 ALPAKA_CLANG_VER=3.5 ALPAKA_BOOST_BRANCH=boost-1.59.0 ALPAKA_ACC_GPU_CUDA_ENABLE=OFF
- ALPAKA_CUDA_VERSION=7.0 ALPAKA_ANALYSIS=ON ALPAKA_DEBUG=1 ALPAKA_CMAKE_VER=3.2.2 CMAKE_BUILD_TYPE=Debug OMP_NUM_THREADS=4 ALPAKA_GCC_VER=5 ALPAKA_CLANG_VER=3.7 ALPAKA_BOOST_BRANCH=develop ALPAKA_ACC_GPU_CUDA_ENABLE=OFF

- ALPAKA_CUDA_VERSION=7.0 ALPAKA_ANALYSIS=OFF ALPAKA_DEBUG=2 ALPAKA_CMAKE_VER=3.3.1 CMAKE_BUILD_TYPE=Release OMP_NUM_THREADS=4 ALPAKA_GCC_VER=4.9 ALPAKA_CLANG_VER=3.6 ALPAKA_BOOST_BRANCH=boost-1.58.0 ALPAKA_ACC_GPU_CUDA_ENABLE=ON
- ALPAKA_CUDA_VERSION=7.0 ALPAKA_ANALYSIS=OFF ALPAKA_DEBUG=0 ALPAKA_CMAKE_VER=3.2.2 CMAKE_BUILD_TYPE=Release OMP_NUM_THREADS=3 ALPAKA_GCC_VER=4.9 ALPAKA_CLANG_VER=3.5 ALPAKA_BOOST_BRANCH=boost-1.59.0 ALPAKA_ACC_GPU_CUDA_ENABLE=ON
- ALPAKA_CUDA_VERSION=7.0 ALPAKA_ANALYSIS=OFF ALPAKA_DEBUG=2 ALPAKA_CMAKE_VER=3.0.2 CMAKE_BUILD_TYPE=Release OMP_NUM_THREADS=2 ALPAKA_GCC_VER=4.9 ALPAKA_CLANG_VER=3.6 ALPAKA_BOOST_BRANCH=boost-1.56.0 ALPAKA_ACC_GPU_CUDA_ENABLE=OFF
- ALPAKA_CUDA_VERSION=7.0 ALPAKA_ANALYSIS=OFF ALPAKA_DEBUG=0 ALPAKA_CMAKE_VER=2.8.12.2 CMAKE_BUILD_TYPE=Release OMP_NUM_THREADS=1 ALPAKA_GCC_VER=4.9 ALPAKA_CLANG_VER=3.5 ALPAKA_BOOST_BRANCH=boost-1.57.0 ALPAKA_ACC_GPU_CUDA_ENABLE=OFF
- ALPAKA_CUDA_VERSION=7.0 ALPAKA_ANALYSIS=OFF ALPAKA_DEBUG=1 ALPAKA_CMAKE_VER=3.2.2 CMAKE_BUILD_TYPE=Release OMP_NUM_THREADS=4 ALPAKA_GCC_VER=5 ALPAKA_CLANG_VER=3.7 ALPAKA_BOOST_BRANCH=develop ALPAKA_ACC_GPU_CUDA_ENABLE=OFF
- ALPAKA_CUDA_VERSION=7.0 ALPAKA_ANALYSIS=OFF ALPAKA_DEBUG=2 ALPAKA_CMAKE_VER=3.3.2 CMAKE_BUILD_TYPE=Debug OMP_NUM_THREADS=4 ALPAKA_GCC_VER=4.9 ALPAKA_CLANG_VER=3.6 ALPAKA_BOOST_BRANCH=boost-1.56.0 ALPAKA_ACC_GPU_CUDA_ENABLE=ON
- ALPAKA_CUDA_VERSION=7.0 ALPAKA_ANALYSIS=OFF ALPAKA_DEBUG=0 ALPAKA_CMAKE_VER=3.3.1 CMAKE_BUILD_TYPE=Debug OMP_NUM_THREADS=3 ALPAKA_GCC_VER=4.9 ALPAKA_CLANG_VER=3.5 ALPAKA_BOOST_BRANCH=boost-1.57.0 ALPAKA_ACC_GPU_CUDA_ENABLE=ON
- ALPAKA_CUDA_VERSION=7.0 ALPAKA_ANALYSIS=OFF ALPAKA_DEBUG=2 ALPAKA_CMAKE_VER=3.3.0 CMAKE_BUILD_TYPE=Debug OMP_NUM_THREADS=2 ALPAKA_GCC_VER=4.9 ALPAKA_CLANG_VER=3.6 ALPAKA_BOOST_BRANCH=boost-1.58.0 ALPAKA_ACC_GPU_CUDA_ENABLE=OFF
- ALPAKA_CUDA_VERSION=7.0 ALPAKA_ANALYSIS=ON ALPAKA_DEBUG=1 ALPAKA_CMAKE_VER=3.3.2 CMAKE_BUILD_TYPE=Debug OMP_NUM_THREADS=4 ALPAKA_GCC_VER=5 ALPAKA_CLANG_VER=3.5 ALPAKA_BOOST_BRANCH=boost-1.59.0 ALPAKA_ACC_GPU_CUDA_ENABLE=OFF
- ALPAKA_CUDA_VERSION=7.0 ALPAKA_ANALYSIS=ON ALPAKA_DEBUG=1 ALPAKA_CMAKE_VER=3.3.1 CMAKE_BUILD_TYPE=Debug OMP_NUM_THREADS=4 ALPAKA_GCC_VER=5 ALPAKA_CLANG_VER=3.7 ALPAKA_BOOST_BRANCH=develop ALPAKA_ACC_GPU_CUDA_ENABLE=OFF

- ALPAKA_CUDA_VERSION=7.0 ALPAKA_ANALYSIS=OFF ALPAKA_DEBUG=2 ALPAKA_CMAKE_VER=3.3.0 CMAKE_BUILD_TYPE=Release OMP_NUM_THREADS=4 ALPAKA_GCC_VER=4.9 ALPAKA_CLANG_VER=3.6 ALPAKA_BOOST_BRANCH=boost-1.58.0 ALPAKA_ACC_GPU_CUDA_ENABLE=ON
- ALPAKA_CUDA_VERSION=7.0 ALPAKA_ANALYSIS=OFF ALPAKA_DEBUG=0 ALPAKA_CMAKE_VER=3.3.2 CMAKE_BUILD_TYPE=Release OMP_NUM_THREADS=3 ALPAKA_GCC_VER=4.9 ALPAKA_CLANG_VER=3.5 ALPAKA_BOOST_BRANCH=boost-1.59.0 ALPAKA_ACC_GPU_CUDA_ENABLE=ON
- ALPAKA_CUDA_VERSION=7.0 ALPAKA_ANALYSIS=OFF ALPAKA_DEBUG=2 ALPAKA_CMAKE_VER=3.3.1 CMAKE_BUILD_TYPE=Release OMP_NUM_THREADS=2 ALPAKA_GCC_VER=4.9 ALPAKA_CLANG_VER=3.6 ALPAKA_BOOST_BRANCH=boost-1.56.0 ALPAKA_ACC_GPU_CUDA_ENABLE=OFF
- ALPAKA_CUDA_VERSION=7.0 ALPAKA_ANALYSIS=OFF ALPAKA_DEBUG=0 ALPAKA_CMAKE_VER=3.3.0 CMAKE_BUILD_TYPE=Release OMP_NUM_THREADS=1 ALPAKA_GCC_VER=4.9 ALPAKA_CLANG_VER=3.5 ALPAKA_BOOST_BRANCH=boost-1.57.0 ALPAKA_ACC_GPU_CUDA_ENABLE=OFF
- ALPAKA_CUDA_VERSION=7.0 ALPAKA_ANALYSIS=OFF ALPAKA_DEBUG=1 ALPAKA_CMAKE_VER=3.3.2 CMAKE_BUILD_TYPE=Release OMP_NUM_THREADS=4 ALPAKA_GCC_VER=5 ALPAKA_CLANG_VER=3.7 ALPAKA_BOOST_BRANCH=develop ALPAKA_ACC_GPU_CUDA_ENABLE=OFF

matrix:
allow_failures:
- compiler: gcc
env: ALPAKA_CUDA_VERSION=7.0 ALPAKA_ANALYSIS=ON ALPAKA_DEBUG=1 ALPAKA_CMAKE_VER=3.2.2 CMAKE_BUILD_TYPE=Debug OMP_NUM_THREADS=4 ALPAKA_GCC_VER=5 ALPAKA_CLANG_VER=3.7 ALPAKA_BOOST_BRANCH=develop ALPAKA_ACC_GPU_CUDA_ENABLE=OFF
env: ALPAKA_CUDA_VERSION=7.0 ALPAKA_ANALYSIS=ON ALPAKA_DEBUG=1 ALPAKA_CMAKE_VER=3.3.1 CMAKE_BUILD_TYPE=Debug OMP_NUM_THREADS=4 ALPAKA_GCC_VER=5 ALPAKA_CLANG_VER=3.7 ALPAKA_BOOST_BRANCH=develop ALPAKA_ACC_GPU_CUDA_ENABLE=OFF
- compiler: gcc
env: ALPAKA_CUDA_VERSION=7.0 ALPAKA_ANALYSIS=OFF ALPAKA_DEBUG=1 ALPAKA_CMAKE_VER=3.2.2 CMAKE_BUILD_TYPE=Release OMP_NUM_THREADS=4 ALPAKA_GCC_VER=5 ALPAKA_CLANG_VER=3.7 ALPAKA_BOOST_BRANCH=develop ALPAKA_ACC_GPU_CUDA_ENABLE=OFF
env: ALPAKA_CUDA_VERSION=7.0 ALPAKA_ANALYSIS=OFF ALPAKA_DEBUG=1 ALPAKA_CMAKE_VER=3.3.2 CMAKE_BUILD_TYPE=Release OMP_NUM_THREADS=4 ALPAKA_GCC_VER=5 ALPAKA_CLANG_VER=3.7 ALPAKA_BOOST_BRANCH=develop ALPAKA_ACC_GPU_CUDA_ENABLE=OFF
- compiler: clang
env: ALPAKA_CUDA_VERSION=7.0 ALPAKA_ANALYSIS=ON ALPAKA_DEBUG=1 ALPAKA_CMAKE_VER=3.2.2 CMAKE_BUILD_TYPE=Debug OMP_NUM_THREADS=4 ALPAKA_GCC_VER=5 ALPAKA_CLANG_VER=3.7 ALPAKA_BOOST_BRANCH=develop ALPAKA_ACC_GPU_CUDA_ENABLE=OFF
env: ALPAKA_CUDA_VERSION=7.0 ALPAKA_ANALYSIS=ON ALPAKA_DEBUG=1 ALPAKA_CMAKE_VER=3.3.1 CMAKE_BUILD_TYPE=Debug OMP_NUM_THREADS=4 ALPAKA_GCC_VER=5 ALPAKA_CLANG_VER=3.7 ALPAKA_BOOST_BRANCH=develop ALPAKA_ACC_GPU_CUDA_ENABLE=OFF
- compiler: clang
env: ALPAKA_CUDA_VERSION=7.0 ALPAKA_ANALYSIS=OFF ALPAKA_DEBUG=1 ALPAKA_CMAKE_VER=3.2.2 CMAKE_BUILD_TYPE=Release OMP_NUM_THREADS=4 ALPAKA_GCC_VER=5 ALPAKA_CLANG_VER=3.7 ALPAKA_BOOST_BRANCH=develop ALPAKA_ACC_GPU_CUDA_ENABLE=OFF
env: ALPAKA_CUDA_VERSION=7.0 ALPAKA_ANALYSIS=OFF ALPAKA_DEBUG=1 ALPAKA_CMAKE_VER=3.3.2 CMAKE_BUILD_TYPE=Release OMP_NUM_THREADS=4 ALPAKA_GCC_VER=5 ALPAKA_CLANG_VER=3.7 ALPAKA_BOOST_BRANCH=develop ALPAKA_ACC_GPU_CUDA_ENABLE=OFF
- os: osx

branches:
Expand Down Expand Up @@ -314,25 +314,11 @@ install:
- echo ${ALPAKA_CMAKE_VER_MAJOR}
- ALPAKA_CMAKE_VER_MINOR=${ALPAKA_CMAKE_VER:2:1}
- echo ${ALPAKA_CMAKE_VER_MINOR}
# NOTE: Older versions have to be built from source because CMake does not provide older x64 binaries.
- if (( (( ${ALPAKA_CMAKE_VER_MAJOR} < 3 )) || ( (( ${ALPAKA_CMAKE_VER_MAJOR} == 3 )) && (( ${ALPAKA_CMAKE_VER_MINOR} < 1 )) ) ))
;then
ALPAKA_CMAKE_PKG_FILE_NAME=cmake-${ALPAKA_CMAKE_VER}
&& wget http://www.cmake.org/files/v${ALPAKA_CMAKE_VER_MAJOR}.${ALPAKA_CMAKE_VER_MINOR}/${ALPAKA_CMAKE_PKG_FILE_NAME}.tar.gz
&& tar -xzf ${ALPAKA_CMAKE_PKG_FILE_NAME}.tar.gz
&& cd cmake-${ALPAKA_CMAKE_VER}
&& ./bootstrap --prefix=/usr
&& make
&& sudo make install
&& cd ../
&& sudo rm -rf ${ALPAKA_CMAKE_PKG_FILE_NAME}.tar.gz ${ALPAKA_CMAKE_PKG_FILE_NAME}
;else
ALPAKA_CMAKE_PKG_FILE_NAME=cmake-${ALPAKA_CMAKE_VER}-Linux-x86_64
&& wget http://www.cmake.org/files/v${ALPAKA_CMAKE_VER_MAJOR}.${ALPAKA_CMAKE_VER_MINOR}/${ALPAKA_CMAKE_PKG_FILE_NAME}.tar.gz
&& tar -xzf ${ALPAKA_CMAKE_PKG_FILE_NAME}.tar.gz
&& sudo cp -fR cmake-${ALPAKA_CMAKE_VER}-Linux-x86_64/* /usr
&& sudo rm -rf ${ALPAKA_CMAKE_PKG_FILE_NAME}.tar.gz ${ALPAKA_CMAKE_PKG_FILE_NAME}
;fi
- ALPAKA_CMAKE_PKG_FILE_NAME=cmake-${ALPAKA_CMAKE_VER}-Linux-x86_64
- wget http://www.cmake.org/files/v${ALPAKA_CMAKE_VER_MAJOR}.${ALPAKA_CMAKE_VER_MINOR}/${ALPAKA_CMAKE_PKG_FILE_NAME}.tar.gz
&& tar -xzf ${ALPAKA_CMAKE_PKG_FILE_NAME}.tar.gz
&& sudo cp -fR cmake-${ALPAKA_CMAKE_VER}-Linux-x86_64/* /usr
&& sudo rm -rf ${ALPAKA_CMAKE_PKG_FILE_NAME}.tar.gz ${ALPAKA_CMAKE_PKG_FILE_NAME}

#-------------------------------------------------------------------------------
# Clone boost.
Expand Down
33 changes: 15 additions & 18 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ Accelerator Back-ends
|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)|
|OpenMP 4.0|OpenMP 4.0|Host CPU (multi core)|parallel (undefined)|parallel (preemptive multitasking)|
|OpenMP 4.0 (CPU)|OpenMP 4.0|Host CPU (multi core)|parallel (undefined)|parallel (preemptive multitasking)|
| 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)|
|CUDA 7.0|CUDA 7.0|NVIDIA GPUs SM 2.0+|parallel (undefined)|parallel (lock-step within warps)|
Expand All @@ -55,15 +55,15 @@ Supported Compilers

This library uses C++11 (or newer when available).

|Accelerator Back-end|gcc 4.9.2|gcc 5.2|clang 3.5/3.6|clang 3.7|MSVC 2015|icc 15.0+ (untested)|
|---|---|---|---|---|---|---|
|Serial|: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:|:x:|:white_check_mark:|:white_check_mark:|:white_check_mark:|
|OpenMP 2.0 threads|:white_check_mark:|:white_check_mark:|:x:|:white_check_mark:|:white_check_mark:|:white_check_mark:|
|OpenMP 4.0|:white_check_mark:|:white_check_mark:|:x:|:x:|:x:|:white_check_mark:|
| std::thread |: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:|
|CUDA 7.0|:white_check_mark:|:x:|:x:|:x:|:x:|:white_check_mark:|
|Accelerator Back-end|gcc 4.9.2|gcc 5.2|clang 3.5/3.6|clang 3.7|MSVC 2015|
|---|---|---|---|---|---|
|Serial|: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:|:x:|:white_check_mark:|:white_check_mark:|
|OpenMP 2.0 threads|:white_check_mark:|:white_check_mark:|:x:|:white_check_mark:|:white_check_mark:|
|OpenMP 4.0 (CPU)|:white_check_mark:|:white_check_mark:|:x:|:x:|:x:|
| std::thread |: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:|
|CUDA 7.0|:white_check_mark:|:x:|:x:|:x:|:x:|

**NOTE**: :bangbang: Currently the *CUDA accelerator back-end* can not be enabled together with the *std::thread accelerator back-end* or the *Boost.Fiber accelerator back-end* due to bugs in the NVIDIA nvcc compiler :bangbang:

Expand Down Expand Up @@ -91,17 +91,14 @@ Usage
-----

The library is header only so nothing has to be build.
Only the include path (`-I` or `export CPLUS_INCLUDE_PATH=`) has to be set to `<PATH-TO-ALPAKA-LIB>/include/`.
This allows to include the whole alpaka library with: `#include <alpaka/alpaka.hpp>`
CMake 3.3.0+ is required to provide the correct defines and include paths.
Just call `ALPAKA_ADD_EXECUTABLE` instead of `CUDA_ADD_EXECUTABLE` or `ADD_EXECUTABLE` and the difficulties of the CUDA nvcc compier in handling `.cu` and `.cpp` files is automatically taken care of.
Examples how to utilize alpaka within CMake can be found in the `examples` folder.

Source files do not need any special file ending.
The whole alpaka library can be included with: `#include <alpaka/alpaka.hpp>`
Code not intended to be utilized by users is hidden in the `detail` namespace.

If you are building with the *CUDA accelerator back-end* enabled, your source files are required to have the ending `.cu` to comply with the nvcc (NVIDIA CUDA C++ compiler) rules for code files using CUDA.
When the *CUDA accelerator back-end* is disabled, this is not required and a `.cpp` extension is enough.
To allow both use-cases, it is desirable to have both, a `.cpp` file with the implementation and a `.cu` file containing only `#include <PATH/TO/IMPL.cpp>` to forward to the implementation.
The build system then has to use the `.cu` files when the *CUDA accelerator back-end* is enabled and the `.cpp` files else.
Examples how to do this with CMake can be found in the `examples` folder.


Authors
-------
Expand Down
21 changes: 14 additions & 7 deletions alpakaConfig.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ UNSET(_ALPAKA_INCLUDE_DIRECTORIES_PUBLIC)
UNSET(_ALPAKA_LINK_LIBRARIES_PUBLIC)
UNSET(_ALPAKA_LINK_FLAGS_PUBLIC)
UNSET(_ALPAKA_COMMON_FILE)
UNSET(_ALPAKA_ADD_EXECUTABLE_FILE)
UNSET(_ALPAKA_FILES_HEADER)
UNSET(_ALPAKA_FILES_SOURCE)
UNSET(_ALPAKA_FILES_OTHER)
Expand Down Expand Up @@ -75,6 +76,10 @@ LIST(APPEND CMAKE_MODULE_PATH "${_ALPAKA_ROOT_DIR}/cmake/modules")
SET(_ALPAKA_COMMON_FILE "${_ALPAKA_ROOT_DIR}/cmake/common.cmake")
INCLUDE("${_ALPAKA_COMMON_FILE}")

# Add ALPAKA_ADD_EXECUTABLE function.
SET(_ALPAKA_ADD_EXECUTABLE_FILE "${_ALPAKA_ROOT_DIR}/cmake/addExecutable.cmake")
INCLUDE("${_ALPAKA_ADD_EXECUTABLE_FILE}")

#-------------------------------------------------------------------------------
# Options.
#-------------------------------------------------------------------------------
Expand All @@ -83,7 +88,7 @@ OPTION(ALPAKA_ACC_CPU_B_SEQ_T_THREADS_ENABLE "Enable the threads CPU block threa
OPTION(ALPAKA_ACC_CPU_B_SEQ_T_FIBERS_ENABLE "Enable the fibers CPU block thread accelerator" ON)
OPTION(ALPAKA_ACC_CPU_B_OMP2_T_SEQ_ENABLE "Enable the OpenMP 2.0 CPU grid block accelerator" ON)
OPTION(ALPAKA_ACC_CPU_B_SEQ_T_OMP2_ENABLE "Enable the OpenMP 2.0 CPU block thread accelerator" ON)
OPTION(ALPAKA_ACC_CPU_BT_OMP4_ENABLE "Enable the OpenMP 4.0 CPU block and block thread accelerator" ON)
OPTION(ALPAKA_ACC_CPU_BT_OMP4_ENABLE "Enable the OpenMP 4.0 CPU block and block thread accelerator" OFF)
OPTION(ALPAKA_ACC_GPU_CUDA_ENABLE "Enable the CUDA GPU accelerator" ON)

# Drop-down combo box in cmake-gui.
Expand Down Expand Up @@ -185,13 +190,12 @@ IF(ALPAKA_ACC_CPU_B_OMP2_T_SEQ_ENABLE OR ALPAKA_ACC_CPU_B_SEQ_T_OMP2_ENABLE OR A

ELSE()
SET(_ALPAKA_COMPILE_OPTIONS_PUBLIC ${OpenMP_CXX_FLAGS})
IF(NOT MSVC)
SET(_ALPAKA_LINK_FLAGS_PUBLIC ${OpenMP_CXX_FLAGS})
ENDIF()
# CUDA requires some special handling
IF(ALPAKA_ACC_GPU_CUDA_ENABLE)
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}")
ELSE()
IF(NOT MSVC)
SET(_ALPAKA_LINK_FLAGS_PUBLIC ${OpenMP_CXX_FLAGS})
ENDIF()
ENDIF()
ENDIF()
ENDIF()
Expand Down Expand Up @@ -356,7 +360,7 @@ SET(_ALPAKA_SUFFIXED_INCLUDE_DIR "${_ALPAKA_INCLUDE_DIRECTORY}/alpaka")
SET(_ALPAKA_LINK_LIBRARY)
LIST(APPEND _ALPAKA_LINK_LIBRARIES_PUBLIC "${_ALPAKA_LINK_LIBRARY}")

SET(_ALPAKA_FILES_OTHER "${_ALPAKA_ROOT_DIR}/alpakaConfig.cmake" "${_ALPAKA_COMMON_FILE}" "${_ALPAKA_ROOT_DIR}/.travis.yml" "${_ALPAKA_ROOT_DIR}/README.md")
SET(_ALPAKA_FILES_OTHER "${_ALPAKA_ROOT_DIR}/alpakaConfig.cmake" "${_ALPAKA_ADD_EXECUTABLE_FILE}" "${_ALPAKA_COMMON_FILE}" "${_ALPAKA_ROOT_DIR}/.travis.yml" "${_ALPAKA_ROOT_DIR}/README.md")

# Add all the source and include files in all recursive subdirectories and group them accordingly.
append_recursive_files_add_to_src_group("${_ALPAKA_SUFFIXED_INCLUDE_DIR}" "${_ALPAKA_SUFFIXED_INCLUDE_DIR}" "hpp" "_ALPAKA_FILES_HEADER")
Expand Down Expand Up @@ -453,7 +457,8 @@ LIST(APPEND alpaka_DEFINITIONS ${_ALPAKA_COMPILE_OPTIONS_PUBLIC})
SET(alpaka_INCLUDE_DIR ${_ALPAKA_INCLUDE_DIRECTORY})
SET(alpaka_INCLUDE_DIRS ${_ALPAKA_INCLUDE_DIRECTORIES_PUBLIC})
SET(alpaka_LIBRARY ${_ALPAKA_LINK_LIBRARY})
SET(alpaka_LIBRARIES ${_ALPAKA_LINK_LIBRARIES_PUBLIC})
SET(alpaka_LIBRARIES ${_ALPAKA_LINK_FLAGS_PUBLIC})
LIST(APPEND alpaka_LIBRARIES ${_ALPAKA_LINK_LIBRARIES_PUBLIC})

#-------------------------------------------------------------------------------
# Print the return values.
Expand Down Expand Up @@ -491,6 +496,7 @@ IF(NOT _ALPAKA_FOUND)
UNSET(_ALPAKA_LINK_LIBRARIES_PUBLIC)
UNSET(_ALPAKA_LINK_FLAGS_PUBLIC)
UNSET(_ALPAKA_COMMON_FILE)
UNSET(_ALPAKA_ADD_EXECUTABLE_FILE)
UNSET(_ALPAKA_FILES_HEADER)
UNSET(_ALPAKA_FILES_SOURCE)
UNSET(_ALPAKA_FILES_OTHER)
Expand All @@ -512,6 +518,7 @@ ELSE()
_ALPAKA_LINK_LIBRARIES_PUBLIC
_ALPAKA_LINK_FLAGS_PUBLIC
_ALPAKA_COMMON_FILE
_ALPAKA_ADD_EXECUTABLE_FILE
_ALPAKA_FILES_HEADER
_ALPAKA_FILES_SOURCE
_ALPAKA_FILES_OTHER
Expand Down
39 changes: 39 additions & 0 deletions cmake/addExecutable.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
################################################################################
# Copyright 2015 Benjamin Worpitz
#
# Permission to use, copy, modify, and/or distribute this software for any
# purpose with or without fee is hereby granted, provided that the above
# copyright notice and this permission notice appear in all copies.
#
# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
# SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER
# RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
# NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE
# USE OR PERFORMANCE OF THIS SOFTWARE.
################################################################################

# CUDA_SOURCE_PROPERTY_FORMAT is only supported starting from 3.3.0.
CMAKE_MINIMUM_REQUIRED(VERSION 3.3.0)

#------------------------------------------------------------------------------
# Calls CUDA_ADD_EXECUTABLE or ADD_EXECUTABLE depending on the enabled alpaka accelerators.
#------------------------------------------------------------------------------
FUNCTION(ALPAKA_ADD_EXECUTABLE In_Name)
IF(ALPAKA_ACC_GPU_CUDA_ENABLE)
FOREACH(_file ${ARGN})
IF((${_file} MATCHES "\\.cpp$") OR (${_file} MATCHES "\\.cxx$"))
SET_SOURCE_FILES_PROPERTIES(${_file} PROPERTIES CUDA_SOURCE_PROPERTY_FORMAT OBJ)
ENDIF()
ENDFOREACH()
CMAKE_POLICY(SET CMP0023 OLD) # CUDA_ADD_EXECUTABLE calls TARGET_LINK_LIBRARIES without keywords.
CUDA_ADD_EXECUTABLE(
${In_Name}
${ARGN})
ELSE()
ADD_EXECUTABLE(
${In_Name}
${ARGN})
ENDIF()
ENDFUNCTION()
Loading

0 comments on commit 66f2e53

Please sign in to comment.