From 5318404249a4b1ac00059f2c08c784bfb28e2e02 Mon Sep 17 00:00:00 2001 From: Tom Lin Date: Wed, 26 May 2021 17:46:07 +0100 Subject: [PATCH] Use ./src instead of ./cpp Create subdir for each cpp-based implementation --- .github/workflows/main.yaml | 4 +- cpp/LICENSE => LICENSE | 0 README.md | 18 ++- cpp/.gitignore | 30 ---- {cpp/legacy => legacy}/HCStream.cpp | 0 {cpp/legacy => legacy}/HCStream.h | 0 cpp/legacy/HC.make => legacy/Makefile | 3 +- src/.gitignore | 29 ++++ {cpp => src}/CL/cl.h | 0 {cpp => src}/CL/cl2.hpp | 0 {cpp => src}/CL/cl_d3d10.h | 0 {cpp => src}/CL/cl_d3d11.h | 0 {cpp => src}/CL/cl_dx9_media_sharing.h | 0 {cpp => src}/CL/cl_dx9_media_sharing_intel.h | 0 {cpp => src}/CL/cl_egl.h | 0 {cpp => src}/CL/cl_ext.h | 0 {cpp => src}/CL/cl_ext_intel.h | 0 {cpp => src}/CL/cl_gl.h | 0 {cpp => src}/CL/cl_gl_ext.h | 0 {cpp => src}/CL/cl_half.h | 0 {cpp => src}/CL/cl_icd.h | 0 {cpp => src}/CL/cl_platform.h | 0 .../CL/cl_va_api_media_sharing_intel.h | 0 {cpp => src}/CL/cl_version.h | 0 {cpp => src}/CL/opencl.h | 0 {cpp => src}/CMakeLists.txt | 64 ++------ {cpp => src}/Stream.h | 0 {cpp => src/acc}/ACCStream.cpp | 0 {cpp => src/acc}/ACCStream.h | 0 cpp/OpenACC.make => src/acc/Makefile | 4 +- cpp/ACC.cmake => src/acc/model.cmake | 0 {cpp => src}/ci-prepare-bionic.sh | 0 {cpp => src}/ci-test-compile.sh | 150 +++++++++--------- .../Modules/ComputeCppCompilerChecks.cmake | 0 .../cmake/Modules/ComputeCppIRMap.cmake | 0 .../cmake/Modules/FindComputeCpp.cmake | 0 .../cmake/toolchains/arm-gcc-poky.cmake | 0 .../cmake/toolchains/gcc-generic.cmake | 0 {cpp => src/cuda}/CUDAStream.cu | 0 {cpp => src/cuda}/CUDAStream.h | 0 cpp/CUDA.make => src/cuda/Makefile | 4 +- cpp/CUDA.cmake => src/cuda/model.cmake | 0 {cpp => src/hip}/HIPStream.cpp | 0 {cpp => src/hip}/HIPStream.h | 0 cpp/HIP.make => src/hip/Makefile | 4 +- cpp/HIP.cmake => src/hip/model.cmake | 0 {cpp => src/kokkos}/KokkosStream.cpp | 0 {cpp => src/kokkos}/KokkosStream.hpp | 0 cpp/Kokkos.make => src/kokkos/Makefile | 13 +- cpp/KOKKOS.cmake => src/kokkos/model.cmake | 0 {cpp => src}/main.cpp | 0 cpp/OpenCL.make => src/ocl/Makefile | 4 +- {cpp => src/ocl}/OCLStream.cpp | 0 {cpp => src/ocl}/OCLStream.h | 0 cpp/OCL.cmake => src/ocl/model.cmake | 0 cpp/OpenMP.make => src/omp/Makefile | 4 +- {cpp => src/omp}/OMPStream.cpp | 0 {cpp => src/omp}/OMPStream.h | 0 cpp/OMP.cmake => src/omp/model.cmake | 0 cpp/RAJA.make => src/raja/Makefile | 4 +- {cpp => src/raja}/RAJAStream.cpp | 0 {cpp => src/raja}/RAJAStream.hpp | 0 cpp/RAJA.cmake => src/raja/model.cmake | 0 {cpp => src}/register_models.cmake | 12 +- cpp/STD.make => src/std/Makefile | 4 +- {cpp => src/std}/STDStream.cpp | 0 {cpp => src/std}/STDStream.h | 0 cpp/STD.cmake => src/std/model.cmake | 0 cpp/STD20.make => src/std20/Makefile | 4 +- {cpp => src/std20}/STD20Stream.cpp | 0 {cpp => src/std20}/STD20Stream.hpp | 0 cpp/STD20.cmake => src/std20/model.cmake | 0 cpp/SYCL.make => src/sycl/Makefile | 4 +- {cpp => src/sycl}/SYCLStream.cpp | 0 {cpp => src/sycl}/SYCLStream.h | 0 cpp/SYCL.cmake => src/sycl/model.cmake | 0 76 files changed, 163 insertions(+), 196 deletions(-) rename cpp/LICENSE => LICENSE (100%) delete mode 100644 cpp/.gitignore rename {cpp/legacy => legacy}/HCStream.cpp (100%) rename {cpp/legacy => legacy}/HCStream.h (100%) rename cpp/legacy/HC.make => legacy/Makefile (79%) create mode 100644 src/.gitignore rename {cpp => src}/CL/cl.h (100%) rename {cpp => src}/CL/cl2.hpp (100%) rename {cpp => src}/CL/cl_d3d10.h (100%) rename {cpp => src}/CL/cl_d3d11.h (100%) rename {cpp => src}/CL/cl_dx9_media_sharing.h (100%) rename {cpp => src}/CL/cl_dx9_media_sharing_intel.h (100%) rename {cpp => src}/CL/cl_egl.h (100%) rename {cpp => src}/CL/cl_ext.h (100%) rename {cpp => src}/CL/cl_ext_intel.h (100%) rename {cpp => src}/CL/cl_gl.h (100%) rename {cpp => src}/CL/cl_gl_ext.h (100%) rename {cpp => src}/CL/cl_half.h (100%) rename {cpp => src}/CL/cl_icd.h (100%) rename {cpp => src}/CL/cl_platform.h (100%) rename {cpp => src}/CL/cl_va_api_media_sharing_intel.h (100%) rename {cpp => src}/CL/cl_version.h (100%) rename {cpp => src}/CL/opencl.h (100%) rename {cpp => src}/CMakeLists.txt (76%) rename {cpp => src}/Stream.h (100%) rename {cpp => src/acc}/ACCStream.cpp (100%) rename {cpp => src/acc}/ACCStream.h (100%) rename cpp/OpenACC.make => src/acc/Makefile (96%) rename cpp/ACC.cmake => src/acc/model.cmake (100%) rename {cpp => src}/ci-prepare-bionic.sh (100%) rename {cpp => src}/ci-test-compile.sh (61%) rename {cpp => src}/cmake/Modules/ComputeCppCompilerChecks.cmake (100%) rename {cpp => src}/cmake/Modules/ComputeCppIRMap.cmake (100%) rename {cpp => src}/cmake/Modules/FindComputeCpp.cmake (100%) rename {cpp => src}/cmake/toolchains/arm-gcc-poky.cmake (100%) rename {cpp => src}/cmake/toolchains/gcc-generic.cmake (100%) rename {cpp => src/cuda}/CUDAStream.cu (100%) rename {cpp => src/cuda}/CUDAStream.h (100%) rename cpp/CUDA.make => src/cuda/Makefile (88%) rename cpp/CUDA.cmake => src/cuda/model.cmake (100%) rename {cpp => src/hip}/HIPStream.cpp (100%) rename {cpp => src/hip}/HIPStream.h (100%) rename cpp/HIP.make => src/hip/Makefile (76%) rename cpp/HIP.cmake => src/hip/model.cmake (100%) rename {cpp => src/kokkos}/KokkosStream.cpp (100%) rename {cpp => src/kokkos}/KokkosStream.hpp (100%) rename cpp/Kokkos.make => src/kokkos/Makefile (85%) rename cpp/KOKKOS.cmake => src/kokkos/model.cmake (100%) rename {cpp => src}/main.cpp (100%) rename cpp/OpenCL.make => src/ocl/Makefile (85%) rename {cpp => src/ocl}/OCLStream.cpp (100%) rename {cpp => src/ocl}/OCLStream.h (100%) rename cpp/OCL.cmake => src/ocl/model.cmake (100%) rename cpp/OpenMP.make => src/omp/Makefile (95%) rename {cpp => src/omp}/OMPStream.cpp (100%) rename {cpp => src/omp}/OMPStream.h (100%) rename cpp/OMP.cmake => src/omp/model.cmake (100%) rename cpp/RAJA.make => src/raja/Makefile (92%) rename {cpp => src/raja}/RAJAStream.cpp (100%) rename {cpp => src/raja}/RAJAStream.hpp (100%) rename cpp/RAJA.cmake => src/raja/model.cmake (100%) rename {cpp => src}/register_models.cmake (93%) rename cpp/STD.make => src/std/Makefile (72%) rename {cpp => src/std}/STDStream.cpp (100%) rename {cpp => src/std}/STDStream.h (100%) rename cpp/STD.cmake => src/std/model.cmake (100%) rename cpp/STD20.make => src/std20/Makefile (76%) rename {cpp => src/std20}/STD20Stream.cpp (100%) rename {cpp => src/std20}/STD20Stream.hpp (100%) rename cpp/STD20.cmake => src/std20/model.cmake (100%) rename cpp/SYCL.make => src/sycl/Makefile (96%) rename {cpp => src/sycl}/SYCLStream.cpp (100%) rename {cpp => src/sycl}/SYCLStream.h (100%) rename cpp/SYCL.cmake => src/sycl/model.cmake (100%) diff --git a/.github/workflows/main.yaml b/.github/workflows/main.yaml index 43a036f..5bed7b8 100644 --- a/.github/workflows/main.yaml +++ b/.github/workflows/main.yaml @@ -7,7 +7,7 @@ jobs: runs-on: ubuntu-18.04 defaults: run: - working-directory: ./cpp + working-directory: ./src steps: - uses: actions/checkout@v2 @@ -16,7 +16,7 @@ jobs: uses: actions/cache@v2 with: path: compilers - key: ${{ runner.os }}-${{ hashFiles('./cpp/ci-prepare-bionic.sh') }} + key: ${{ runner.os }}-${{ hashFiles('./src/ci-prepare-bionic.sh') }} - name: Prepare compilers if: steps.prepare-compilers.outputs.cache-hit != 'true' diff --git a/cpp/LICENSE b/LICENSE similarity index 100% rename from cpp/LICENSE rename to LICENSE diff --git a/README.md b/README.md index 66ea661..3eaf9a5 100644 --- a/README.md +++ b/README.md @@ -63,20 +63,22 @@ The project supports building with CMake >= 3.13.0, it can be installed without As with any CMake project, first configure the project: ```shell -> cd babelstream/cpp +> cd babelstream/src > cmake -Bbuild -H. -DMODEL= # configure the build, build type defaults to Release > cmake --build build # compile it -> ./build/babelstream # executable available at ./build/ +> ./build/-stream # executable available at ./build/ ``` +Source for each model's implementations are located in `./src/`. + By default, we have defined a set of optimal flags for known HPC compilers. There are assigned those to `RELEASE_FLAGS`, and you can override them if required. To find out what flag each model supports or requires, simply configure while only specifying the model. For example: ```shell -> cd babelstream/cpp -> cmake -Bbuild -H. -DMODEL=OCL +> cd babelstream/src +> cmake -Bbuild -H. -DMODEL=ocl ... - Common Release flags are `-O3`, set RELEASE_FLAGS to override -- CXX_EXTRA_FLAGS: @@ -90,8 +92,8 @@ For example: Use this for linking extra libraries (e.g `-lmylib`, or simply `mylib`) -- CXX_EXTRA_LINKER_FLAGS: Append to linker flags (i.e GCC's `-Wl` or equivalent) --- Available models: OMP;OCL;STD;STD20;HIP;CUDA;KOKKOS;SYCL;ACC;RAJA --- Selected model : OCL +-- Available models: omp;ocl;std;std20;hip;cuda;kokkos;sycl;acc;raja +-- Selected model : ocl -- Supported flags: CMAKE_CXX_COMPILER (optional, default=c++): Any CXX compiler that is supported by CMake detection @@ -107,7 +109,7 @@ Alternatively, refer to the [CI script](./ci-test-compile.sh), which test-compil We have supplied a series of Makefiles, one for each programming model, to assist with building. The Makefiles contain common build options, and should be simple to customise for your needs too. -General usage is `make -f .make` +General usage is `make -C src/` Common compiler flags and names can be set by passing a `COMPILER` option to Make, e.g. `make COMPILER=GNU`. Some models allow specifying a CPU or GPU style target, and this can be set by passing a `TARGET` option to Make, e.g. `make TARGET=GPU`. @@ -125,7 +127,7 @@ cd wget https://github.com/kokkos/kokkos/archive/3.1.01.tar.gz tar -xvf 3.1.01.tar.gz # should end up with ~/kokkos-3.1.01 cd BabelStream -make -f Kokkos.make KOKKOS_PATH=~/kokkos-3.1.01 +make -C src/kokkos KOKKOS_PATH=~/kokkos-3.1.01 ``` See make output for more information on supported flags. diff --git a/cpp/.gitignore b/cpp/.gitignore deleted file mode 100644 index c3ea1da..0000000 --- a/cpp/.gitignore +++ /dev/null @@ -1,30 +0,0 @@ - -cuda-stream -ocl-stream -omp-stream -acc-stream -raja-stream -kokkos-stream -std-stream -sycl-stream -hip-stream - -*.o -*.bc -*.sycl -*.tar -*.gz -*.a - -KokkosCore_config.* - -.DS_Store - -Makefile - -build/ -cmake-build-*/ -CMakeFiles/ -.idea/ -.vscode/ -.directory \ No newline at end of file diff --git a/cpp/legacy/HCStream.cpp b/legacy/HCStream.cpp similarity index 100% rename from cpp/legacy/HCStream.cpp rename to legacy/HCStream.cpp diff --git a/cpp/legacy/HCStream.h b/legacy/HCStream.h similarity index 100% rename from cpp/legacy/HCStream.h rename to legacy/HCStream.h diff --git a/cpp/legacy/HC.make b/legacy/Makefile similarity index 79% rename from cpp/legacy/HC.make rename to legacy/Makefile index b902ada..8047ae1 100644 --- a/cpp/legacy/HC.make +++ b/legacy/Makefile @@ -14,7 +14,8 @@ endif hc-stream: ../main.cpp HCStream.cpp - $(HCC) $(CXXFLAGS) -DHC $^ $(LDFLAGS) $(EXTRA_FLAGS) -o $@ + $(HCC) $(CXXFLAGS) -DHC $^ $(LDFLAGS) $(EXTRA_FLAGS) -o $@ -I. -I.. + .PHONY: clean clean: diff --git a/src/.gitignore b/src/.gitignore new file mode 100644 index 0000000..568a953 --- /dev/null +++ b/src/.gitignore @@ -0,0 +1,29 @@ + +**/cuda-stream +**/ocl-stream +**/omp-stream +**/acc-stream +**/raja-stream +**/kokkos-stream +**/std-stream +**/sycl-stream +**/hip-stream + +**/*.o +**/*.bc +**/*.sycl +**/*.tar +**/*.gz +**/*.a + +**/KokkosCore_Config_* + +**/.DS_Store + + +build/ +cmake-build-*/ +CMakeFiles/ +.idea/ +.vscode/ +.directory \ No newline at end of file diff --git a/cpp/CL/cl.h b/src/CL/cl.h similarity index 100% rename from cpp/CL/cl.h rename to src/CL/cl.h diff --git a/cpp/CL/cl2.hpp b/src/CL/cl2.hpp similarity index 100% rename from cpp/CL/cl2.hpp rename to src/CL/cl2.hpp diff --git a/cpp/CL/cl_d3d10.h b/src/CL/cl_d3d10.h similarity index 100% rename from cpp/CL/cl_d3d10.h rename to src/CL/cl_d3d10.h diff --git a/cpp/CL/cl_d3d11.h b/src/CL/cl_d3d11.h similarity index 100% rename from cpp/CL/cl_d3d11.h rename to src/CL/cl_d3d11.h diff --git a/cpp/CL/cl_dx9_media_sharing.h b/src/CL/cl_dx9_media_sharing.h similarity index 100% rename from cpp/CL/cl_dx9_media_sharing.h rename to src/CL/cl_dx9_media_sharing.h diff --git a/cpp/CL/cl_dx9_media_sharing_intel.h b/src/CL/cl_dx9_media_sharing_intel.h similarity index 100% rename from cpp/CL/cl_dx9_media_sharing_intel.h rename to src/CL/cl_dx9_media_sharing_intel.h diff --git a/cpp/CL/cl_egl.h b/src/CL/cl_egl.h similarity index 100% rename from cpp/CL/cl_egl.h rename to src/CL/cl_egl.h diff --git a/cpp/CL/cl_ext.h b/src/CL/cl_ext.h similarity index 100% rename from cpp/CL/cl_ext.h rename to src/CL/cl_ext.h diff --git a/cpp/CL/cl_ext_intel.h b/src/CL/cl_ext_intel.h similarity index 100% rename from cpp/CL/cl_ext_intel.h rename to src/CL/cl_ext_intel.h diff --git a/cpp/CL/cl_gl.h b/src/CL/cl_gl.h similarity index 100% rename from cpp/CL/cl_gl.h rename to src/CL/cl_gl.h diff --git a/cpp/CL/cl_gl_ext.h b/src/CL/cl_gl_ext.h similarity index 100% rename from cpp/CL/cl_gl_ext.h rename to src/CL/cl_gl_ext.h diff --git a/cpp/CL/cl_half.h b/src/CL/cl_half.h similarity index 100% rename from cpp/CL/cl_half.h rename to src/CL/cl_half.h diff --git a/cpp/CL/cl_icd.h b/src/CL/cl_icd.h similarity index 100% rename from cpp/CL/cl_icd.h rename to src/CL/cl_icd.h diff --git a/cpp/CL/cl_platform.h b/src/CL/cl_platform.h similarity index 100% rename from cpp/CL/cl_platform.h rename to src/CL/cl_platform.h diff --git a/cpp/CL/cl_va_api_media_sharing_intel.h b/src/CL/cl_va_api_media_sharing_intel.h similarity index 100% rename from cpp/CL/cl_va_api_media_sharing_intel.h rename to src/CL/cl_va_api_media_sharing_intel.h diff --git a/cpp/CL/cl_version.h b/src/CL/cl_version.h similarity index 100% rename from cpp/CL/cl_version.h rename to src/CL/cl_version.h diff --git a/cpp/CL/opencl.h b/src/CL/opencl.h similarity index 100% rename from cpp/CL/opencl.h rename to src/CL/opencl.h diff --git a/cpp/CMakeLists.txt b/src/CMakeLists.txt similarity index 76% rename from cpp/CMakeLists.txt rename to src/CMakeLists.txt index d4a11cd..e38130f 100644 --- a/cpp/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -8,46 +8,7 @@ project(BabelStream VERSION 3.5 LANGUAGES CXX) set(CMAKE_CXX_EXTENSIONS OFF) set(CMAKE_CXX_STANDARD_REQUIRED ON) - -#set(MODEL SYCL) -#set(SYCL_COMPILER COMPUTECPP) -#set(SYCL_COMPILER_DIR /home/tom/Desktop/computecpp_archive/ComputeCpp-CE-2.3.0-x86_64-linux-gnu) -#set(MODEL RAJA) -#set(RAJA_IN_TREE /home/tom/Downloads/RAJA-v0.13.0/) -#set(ENABLE_CUDA ON) -#set(TARGET NVIDIA) -#set(CUDA_TOOLKIT_ROOT_DIR /opt/cuda-11.2) -#set(CUDA_ARCH sm_70) -#set(BLT_DIR /home/tom/Downloads/blt-0.3.6/) - -#set(MODEL STD) -#set(ARCH cc70) -#set(CXX_EXTRA_FLAGS -v) - -#set(MODEL CUDA) -#set(ARCH sm_70) -#set(CMAKE_CUDA_COMPILER /opt/cuda-11.2/bin/nvcc) - -#set(MODEL OCL) -#set(OpenCL_LIBRARY /opt/rocm-4.0.0/opencl/lib/libOpenCL.so) -#set(OpenCL_INCLUDE_DIR /opt/rocm-4.0.0/opencl/lib) -#set(RELEASE_FLAGS -Ofast) -#set(CXX_EXTRA_FLAGS -O2) - -#set(CMAKE_CXX_COMPILER /usr/lib/aomp/bin/clang++) -#set(MODEL OMP) -##set(OFFLOAD "AMD:gfx803") -#set(OFFLOAD "NVIDIA:sm_35") -#set(CXX_EXTRA_FLAGS --cuda-path=/opt/cuda-10.2/) - -#set(OFFLOAD "AMD:_70") -#set(CXX_EXTRA_FLAGS --cuda-path=/opt/cuda-10.2/ --gcc-toolchain=/home/tom/spack/opt/spack/linux-fedora33-zen2/gcc-10.2.1/gcc-8.3.0-latmjo2hl2yv53255xkwko7k3y7bx2vv) -#set(CXX_EXTRA_LINKER_FLAGS ) -#set(MODEL HIP) - -#set(MODEL KOKKOS) -#set(KOKKOS_IN_TREE /home/tom/Downloads/kokkos-3.3.00/) - + # the final executable name set(EXE_NAME babelstream) @@ -101,17 +62,17 @@ endif () include(register_models.cmake) # register out models -register_model(OMP OMP OMPStream.cpp) -register_model(OCL OCL OCLStream.cpp) -register_model(STD STD STDStream.cpp) -register_model(STD20 STD20 STD20Stream.cpp) -register_model(HIP HIP HIPStream.cpp) -register_model(CUDA CUDA CUDAStream.cu) -register_model(KOKKOS KOKKOS KokkosStream.cpp) -register_model(SYCL SYCL SYCLStream.cpp) -register_model(ACC ACC ACCStream.cpp) +register_model(omp OMP OMPStream.cpp) +register_model(ocl OCL OCLStream.cpp) +register_model(std STD STDStream.cpp) +register_model(std20 STD20 STD20Stream.cpp) +register_model(hip HIP HIPStream.cpp) +register_model(cuda CUDA CUDAStream.cu) +register_model(kokkos KOKKOS KokkosStream.cpp) +register_model(sycl SYCL SYCLStream.cpp) +register_model(acc ACC ACCStream.cpp) # defining RAJA collides with the RAJA namespace so USE_RAJA -register_model(RAJA USE_RAJA RAJAStream.cpp) +register_model(raja USE_RAJA RAJAStream.cpp) set(USAGE ON CACHE BOOL "Whether to print all custom flags for the selected model") @@ -169,6 +130,7 @@ message(STATUS "Executable : ${EXE_NAME}") # below we have all the usual CMake target setup steps +include_directories(.) add_executable(${EXE_NAME} ${IMPL_SOURCES} main.cpp) target_link_libraries(${EXE_NAME} PUBLIC ${LINK_LIBRARIES}) target_compile_definitions(${EXE_NAME} PUBLIC ${IMPL_DEFINITIONS}) @@ -184,7 +146,7 @@ target_link_options(${EXE_NAME} PUBLIC LINKER:${CXX_EXTRA_LINKER_FLAGS}) target_link_options(${EXE_NAME} PUBLIC ${LINK_FLAGS} ${CXX_EXTRA_LINK_FLAGS}) # some models require the target to be already specified so they can finish their setup here -# this only happens if the MODEL.cmake definition contains the `setup_target` macro +# this only happens if the model.cmake definition contains the `setup_target` macro if (COMMAND setup_target) setup_target(${EXE_NAME}) endif () diff --git a/cpp/Stream.h b/src/Stream.h similarity index 100% rename from cpp/Stream.h rename to src/Stream.h diff --git a/cpp/ACCStream.cpp b/src/acc/ACCStream.cpp similarity index 100% rename from cpp/ACCStream.cpp rename to src/acc/ACCStream.cpp diff --git a/cpp/ACCStream.h b/src/acc/ACCStream.h similarity index 100% rename from cpp/ACCStream.h rename to src/acc/ACCStream.h diff --git a/cpp/OpenACC.make b/src/acc/Makefile similarity index 96% rename from cpp/OpenACC.make rename to src/acc/Makefile index 7a75fd0..55fbfbd 100644 --- a/cpp/OpenACC.make +++ b/src/acc/Makefile @@ -50,8 +50,8 @@ endif FLAGS_GNU = -O3 -std=c++11 -Drestrict=__restrict -fopenacc CXXFLAGS = $(FLAGS_$(COMPILER)) -acc-stream: main.cpp ACCStream.cpp - $(COMPILER_$(COMPILER)) $(CXXFLAGS) -DACC $^ $(EXTRA_FLAGS) -o $@ +acc-stream: ../main.cpp ACCStream.cpp + $(COMPILER_$(COMPILER)) $(CXXFLAGS) -DACC $^ $(EXTRA_FLAGS) -o $@ -I. -I.. .PHONY: clean clean: diff --git a/cpp/ACC.cmake b/src/acc/model.cmake similarity index 100% rename from cpp/ACC.cmake rename to src/acc/model.cmake diff --git a/cpp/ci-prepare-bionic.sh b/src/ci-prepare-bionic.sh similarity index 100% rename from cpp/ci-prepare-bionic.sh rename to src/ci-prepare-bionic.sh diff --git a/cpp/ci-test-compile.sh b/src/ci-test-compile.sh similarity index 61% rename from cpp/ci-test-compile.sh rename to src/ci-test-compile.sh index 1b5c1bb..85efd39 100755 --- a/cpp/ci-test-compile.sh +++ b/src/ci-test-compile.sh @@ -86,38 +86,38 @@ run_build() { } ### -#KOKKOS_SRC="/home/tom/Downloads/kokkos-3.3.00" -#RAJA_SRC="/home/tom/Downloads/RAJA-v0.13.0" -# -#GCC_CXX="/usr/bin/g++" -#CLANG_CXX="/usr/bin/clang++" -# -#NVSDK="/home/tom/Downloads/nvhpc_2021_212_Linux_x86_64_cuda_11.2/install_components/Linux_x86_64/21.2/" -#NVHPC_NVCXX="$NVSDK/compilers/bin/nvc++" -#NVHPC_NVCC="$NVSDK/cuda/11.2/bin/nvcc" -#NVHPC_CUDA_DIR="$NVSDK/cuda/11.2" -#"$NVSDK/compilers/bin/makelocalrc" "$NVSDK/compilers/bin/" -x -# -#AOCC_CXX="/opt/AMD/aocc-compiler-2.3.0/bin/clang++" -#AOMP_CXX="/usr/lib/aomp/bin/clang++" -#OCL_LIB="/home/tom/Downloads/oclcpuexp-2020.11.11.0.04_rel/x64/libOpenCL.so" -# -## AMD needs this rocm_path thing exported... -#export ROCM_PATH="/opt/rocm-4.0.0" -#HIP_CXX="/opt/rocm-4.0.0/bin/hipcc" -#COMPUTECPP_DIR="/home/tom/Desktop/computecpp_archive/ComputeCpp-CE-2.3.0-x86_64-linux-gnu" -#DPCPP_DIR="/home/tom/Downloads/dpcpp_compiler" -#HIPSYCL_DIR="/opt/hipsycl/cff515c/" -# -#ICPX_CXX="/opt/intel/oneapi/compiler/2021.1.2/linux/bin/icpx" -#ICPC_CXX="/opt/intel/oneapi/compiler/2021.1.2/linux/bin/intel64/icpc" -# -#GCC_STD_PAR_LIB="tbb" -#CLANG_STD_PAR_LIB="tbb" -#GCC_OMP_OFFLOAD_AMD=false -#GCC_OMP_OFFLOAD_NVIDIA=true -#CLANG_OMP_OFFLOAD_AMD=false -#CLANG_OMP_OFFLOAD_NVIDIA=false +# KOKKOS_SRC="/home/tom/Downloads/kokkos-3.3.00" +# RAJA_SRC="/home/tom/Downloads/RAJA-v0.13.0" + +# GCC_CXX="/usr/bin/g++" +# CLANG_CXX="/usr/bin/clang++" + +# NVSDK="/home/tom/Downloads/nvhpc_2021_212_Linux_x86_64_cuda_11.2/install_components/Linux_x86_64/21.2/" +# NVHPC_NVCXX="$NVSDK/compilers/bin/nvc++" +# NVHPC_NVCC="$NVSDK/cuda/11.2/bin/nvcc" +# NVHPC_CUDA_DIR="$NVSDK/cuda/11.2" +# "$NVSDK/compilers/bin/makelocalrc" "$NVSDK/compilers/bin/" -x + +# AOCC_CXX="/opt/AMD/aocc-compiler-2.3.0/bin/clang++" +# AOMP_CXX="/usr/lib/aomp/bin/clang++" +# OCL_LIB="/home/tom/Downloads/oclcpuexp-2020.11.11.0.04_rel/x64/libOpenCL.so" + +# # AMD needs this rocm_path thing exported... +# export ROCM_PATH="/opt/rocm-4.0.0" +# HIP_CXX="/opt/rocm-4.0.0/bin/hipcc" +# COMPUTECPP_DIR="/home/tom/Desktop/computecpp_archive/ComputeCpp-CE-2.3.0-x86_64-linux-gnu" +# DPCPP_DIR="/home/tom/Downloads/dpcpp_compiler" +# HIPSYCL_DIR="/opt/hipsycl/cff515c/" + +# ICPX_CXX="/opt/intel/oneapi/compiler/2021.1.2/linux/bin/icpx" +# ICPC_CXX="/opt/intel/oneapi/compiler/2021.1.2/linux/bin/intel64/icpc" + +# GCC_STD_PAR_LIB="tbb" +# CLANG_STD_PAR_LIB="tbb" +# GCC_OMP_OFFLOAD_AMD=false +# GCC_OMP_OFFLOAD_NVIDIA=true +# CLANG_OMP_OFFLOAD_AMD=false +# CLANG_OMP_OFFLOAD_NVIDIA=false ### AMD_ARCH="gfx_903" @@ -128,39 +128,39 @@ build_gcc() { local name="gcc_build" local cxx="-DCMAKE_CXX_COMPILER=${GCC_CXX:?}" - run_build $name "${GCC_CXX:?}" OMP "$cxx" + run_build $name "${GCC_CXX:?}" omp "$cxx" if [ "$MODEL" = "all" ] || [ "$MODEL" = "OMP" ]; then # sanity check that it at least runs - echo "Sanity checking GCC OMP build..." - "./$BUILD_DIR/OMP_$name/omp-stream" -s 1048576 -n 10 + echo "Sanity checking GCC omp build..." + "./$BUILD_DIR/omp_$name/omp-stream" -s 1048576 -n 10 fi # some distributions like Ubuntu bionic implements std par with TBB, so conditionally link it here - run_build $name "${GCC_CXX:?}" STD "$cxx -DCXX_EXTRA_LIBRARIES=${GCC_STD_PAR_LIB:-}" - run_build $name "${GCC_CXX:?}" STD20 "$cxx -DCXX_EXTRA_LIBRARIES=${GCC_STD_PAR_LIB:-}" + run_build $name "${GCC_CXX:?}" std "$cxx -DCXX_EXTRA_LIBRARIES=${GCC_STD_PAR_LIB:-}" + run_build $name "${GCC_CXX:?}" std20 "$cxx -DCXX_EXTRA_LIBRARIES=${GCC_STD_PAR_LIB:-}" if [ "${GCC_OMP_OFFLOAD_AMD:-false}" != "false" ]; then - run_build "amd_$name" "${GCC_CXX:?}" ACC "$cxx -DCXX_EXTRA_FLAGS=-foffload=amdgcn-amdhsa" - run_build "amd_$name" "${GCC_CXX:?}" OMP "$cxx -DOFFLOAD=AMD:$AMD_ARCH" + run_build "amd_$name" "${GCC_CXX:?}" acc "$cxx -DCXX_EXTRA_FLAGS=-foffload=amdgcn-amdhsa" + run_build "amd_$name" "${GCC_CXX:?}" omp "$cxx -DOFFLOAD=AMD:$AMD_ARCH" fi if [ "${GCC_OMP_OFFLOAD_NVIDIA:-false}" != "false" ]; then - run_build "nvidia_$name" "${GCC_CXX:?}" ACC "$cxx -DCXX_EXTRA_FLAGS=-foffload=nvptx-none" - run_build "nvidia_$name" "${GCC_CXX:?}" OMP "$cxx -DOFFLOAD=NVIDIA:$NV_ARCH" + run_build "nvidia_$name" "${GCC_CXX:?}" acc "$cxx -DCXX_EXTRA_FLAGS=-foffload=nvptx-none" + run_build "nvidia_$name" "${GCC_CXX:?}" omp "$cxx -DOFFLOAD=NVIDIA:$NV_ARCH" fi - run_build $name "${GCC_CXX:?}" CUDA "$cxx -DCMAKE_CUDA_COMPILER=${NVHPC_NVCC:?} -DCUDA_ARCH=$NV_ARCH" - run_build $name "${GCC_CXX:?}" CUDA "$cxx -DCMAKE_CUDA_COMPILER=${NVHPC_NVCC:?} -DCUDA_ARCH=$NV_ARCH -DMEM=MANAGED" - run_build $name "${GCC_CXX:?}" CUDA "$cxx -DCMAKE_CUDA_COMPILER=${NVHPC_NVCC:?} -DCUDA_ARCH=$NV_ARCH -DMEM=PAGEFAULT" - # run_build $name "${CC_CXX:?}" KOKKOS "$cxx -DKOKKOS_IN_TREE=${KOKKOS_SRC:?} -DKokkos_ENABLE_CUDA=ON" - run_build "cuda_$name" "${GCC_CXX:?}" KOKKOS "$cxx -DKOKKOS_IN_TREE=${KOKKOS_SRC:?} -DKokkos_ENABLE_OPENMP=ON" - run_build $name "${GCC_CXX:?}" OCL "$cxx -DOpenCL_LIBRARY=${OCL_LIB:?}" - run_build $name "${GCC_CXX:?}" RAJA "$cxx -DRAJA_IN_TREE=${RAJA_SRC:?}" + run_build $name "${GCC_CXX:?}" cuda "$cxx -DCMAKE_CUDA_COMPILER=${NVHPC_NVCC:?} -DCUDA_ARCH=$NV_ARCH" + run_build $name "${GCC_CXX:?}" cuda "$cxx -DCMAKE_CUDA_COMPILER=${NVHPC_NVCC:?} -DCUDA_ARCH=$NV_ARCH -DMEM=MANAGED" + run_build $name "${GCC_CXX:?}" cuda "$cxx -DCMAKE_CUDA_COMPILER=${NVHPC_NVCC:?} -DCUDA_ARCH=$NV_ARCH -DMEM=PAGEFAULT" + # run_build $name "${CC_CXX:?}" kokkos "$cxx -DKOKKOS_IN_TREE=${KOKKOS_SRC:?} -DKokkos_ENABLE_CUDA=ON" + run_build "cuda_$name" "${GCC_CXX:?}" kokkos "$cxx -DKOKKOS_IN_TREE=${KOKKOS_SRC:?} -DKokkos_ENABLE_OPENMP=ON" + run_build $name "${GCC_CXX:?}" ocl "$cxx -DOpenCL_LIBRARY=${OCL_LIB:?}" + run_build $name "${GCC_CXX:?}" raja "$cxx -DRAJA_IN_TREE=${RAJA_SRC:?}" # FIXME fails due to https://gcc.gnu.org/bugzilla/show_bug.cgi?id=100102 # FIXME we also got https://github.com/NVIDIA/nccl/issues/494 -# run_build "cuda_$name" "${GCC_CXX:?}" RAJA "$cxx -DRAJA_IN_TREE=${RAJA_SRC:?} \ +# run_build "cuda_$name" "${GCC_CXX:?}" raja "$cxx -DRAJA_IN_TREE=${RAJA_SRC:?} \ # -DENABLE_CUDA=ON \ # -DTARGET=NVIDIA \ # -DCUDA_TOOLKIT_ROOT_DIR=${NVHPC_CUDA_DIR:?} \ @@ -171,46 +171,46 @@ build_gcc() { build_clang() { local name="clang_build" local cxx="-DCMAKE_CXX_COMPILER=${CLANG_CXX:?}" - run_build $name "${CLANG_CXX:?}" OMP "$cxx" + run_build $name "${CLANG_CXX:?}" omp "$cxx" if [ "${CLANG_OMP_OFFLOAD_AMD:-false}" != "false" ]; then - run_build "amd_$name" "${GCC_CXX:?}" OMP "$cxx -DOFFLOAD=AMD:$AMD_ARCH" + run_build "amd_$name" "${GCC_CXX:?}" omp "$cxx -DOFFLOAD=AMD:$AMD_ARCH" fi if [ "${CLANG_OMP_OFFLOAD_NVIDIA:-false}" != "false" ]; then - run_build "nvidia_$name" "${GCC_CXX:?}" OMP "$cxx -DOFFLOAD=NVIDIA:$NV_ARCH" + run_build "nvidia_$name" "${GCC_CXX:?}" omp "$cxx -DOFFLOAD=NVIDIA:$NV_ARCH" fi - run_build $name "${CLANG_CXX:?}" CUDA "$cxx -DCMAKE_CUDA_COMPILER=${NVHPC_NVCC:?} -DCUDA_ARCH=$NV_ARCH" - run_build $name "${CLANG_CXX:?}" CUDA "$cxx -DCMAKE_CUDA_COMPILER=${NVHPC_NVCC:?} -DCUDA_ARCH=$NV_ARCH -DMEM=MANAGED" - run_build $name "${CLANG_CXX:?}" CUDA "$cxx -DCMAKE_CUDA_COMPILER=${NVHPC_NVCC:?} -DCUDA_ARCH=$NV_ARCH -DMEM=PAGEFAULT" - run_build $name "${CLANG_CXX:?}" KOKKOS "$cxx -DKOKKOS_IN_TREE=${KOKKOS_SRC:?} -DKokkos_ENABLE_OPENMP=ON" - run_build $name "${CLANG_CXX:?}" OCL "$cxx -DOpenCL_LIBRARY=${OCL_LIB:?}" - run_build $name "${CLANG_CXX:?}" STD "$cxx -DCXX_EXTRA_LIBRARIES=${CLANG_STD_PAR_LIB:-}" - # run_build $name "${LANG_CXX:?}" STD20 "$cxx -DCXX_EXTRA_LIBRARIES=${CLANG_STD_PAR_LIB:-}" # not yet supported - run_build $name "${CLANG_CXX:?}" RAJA "$cxx -DRAJA_IN_TREE=${RAJA_SRC:?}" + run_build $name "${CLANG_CXX:?}" cuda "$cxx -DCMAKE_CUDA_COMPILER=${NVHPC_NVCC:?} -DCUDA_ARCH=$NV_ARCH" + run_build $name "${CLANG_CXX:?}" cuda "$cxx -DCMAKE_CUDA_COMPILER=${NVHPC_NVCC:?} -DCUDA_ARCH=$NV_ARCH -DMEM=MANAGED" + run_build $name "${CLANG_CXX:?}" cuda "$cxx -DCMAKE_CUDA_COMPILER=${NVHPC_NVCC:?} -DCUDA_ARCH=$NV_ARCH -DMEM=PAGEFAULT" + run_build $name "${CLANG_CXX:?}" kokkos "$cxx -DKOKKOS_IN_TREE=${KOKKOS_SRC:?} -DKokkos_ENABLE_OPENMP=ON" + run_build $name "${CLANG_CXX:?}" ocl "$cxx -DOpenCL_LIBRARY=${OCL_LIB:?}" + run_build $name "${CLANG_CXX:?}" std "$cxx -DCXX_EXTRA_LIBRARIES=${CLANG_STD_PAR_LIB:-}" + # run_build $name "${LANG_CXX:?}" std20 "$cxx -DCXX_EXTRA_LIBRARIES=${CLANG_STD_PAR_LIB:-}" # not yet supported + run_build $name "${CLANG_CXX:?}" raja "$cxx -DRAJA_IN_TREE=${RAJA_SRC:?}" # no clang /w RAJA+cuda because it needs nvcc which needs gcc } build_nvhpc() { local name="nvhpc_build" local cxx="-DCMAKE_CXX_COMPILER=${NVHPC_NVCXX:?}" - run_build $name "${NVHPC_NVCXX:?}" STD "$cxx -DNVHPC_OFFLOAD=$NV_ARCH_CCXY" - run_build $name "${NVHPC_NVCXX:?}" ACC "$cxx -DTARGET_DEVICE=gpu -DTARGET_PROCESSOR=px -DCUDA_ARCH=$NV_ARCH_CCXY" - run_build $name "${NVHPC_NVCXX:?}" ACC "$cxx -DTARGET_DEVICE=multicore -DTARGET_PROCESSOR=zen" + run_build $name "${NVHPC_NVCXX:?}" std "$cxx -DNVHPC_OFFLOAD=$NV_ARCH_CCXY" + run_build $name "${NVHPC_NVCXX:?}" acc "$cxx -DTARGET_DEVICE=gpu -DTARGET_PROCESSOR=px -DCUDA_ARCH=$NV_ARCH_CCXY" + run_build $name "${NVHPC_NVCXX:?}" acc "$cxx -DTARGET_DEVICE=multicore -DTARGET_PROCESSOR=zen" } build_aocc() { - run_build aocc_build "${AOCC_CXX:?}" OMP "-DCMAKE_CXX_COMPILER=${AOCC_CXX:?}" + run_build aocc_build "${AOCC_CXX:?}" omp "-DCMAKE_CXX_COMPILER=${AOCC_CXX:?}" } build_aomp() { - run_build aomp_amd_build "${AOMP_CXX:?}" OMP "-DCMAKE_CXX_COMPILER=${AOMP_CXX:?} -DOFFLOAD=AMD:gfx906" + run_build aomp_amd_build "${AOMP_CXX:?}" omp "-DCMAKE_CXX_COMPILER=${AOMP_CXX:?} -DOFFLOAD=AMD:gfx906" #run_build aomp_nvidia_build "-DCMAKE_CXX_COMPILER=${AOMP_CXX:?} -DOFFLOAD=NVIDIA:$NV_ARCH" } build_hip() { - run_build hip_build "${HIP_CXX:?}" HIP "-DCMAKE_CXX_COMPILER=${HIP_CXX:?}" + run_build hip_build "${HIP_CXX:?}" hip "-DCMAKE_CXX_COMPILER=${HIP_CXX:?}" } build_icpx() { @@ -218,7 +218,7 @@ build_icpx() { set +u source /opt/intel/oneapi/setvars.sh -force || true set -u - run_build intel_build "${ICPX_CXX:?}" OMP "-DCMAKE_CXX_COMPILER=${ICPX_CXX:?} -DOFFLOAD=INTEL" + run_build intel_build "${ICPX_CXX:?}" omp "-DCMAKE_CXX_COMPILER=${ICPX_CXX:?} -DOFFLOAD=INTEL" } build_icpc() { @@ -228,31 +228,31 @@ build_icpc() { set -u local name="intel_build" local cxx="-DCMAKE_CXX_COMPILER=${ICPC_CXX:?}" - run_build $name "${ICPC_CXX:?}" OMP "$cxx" - run_build $name "${ICPC_CXX:?}" OCL "$cxx -DOpenCL_LIBRARY=${OCL_LIB:?}" - run_build $name "${ICPC_CXX:?}" RAJA "$cxx -DRAJA_IN_TREE=${RAJA_SRC:?}" - run_build $name "${ICPC_CXX:?}" KOKKOS "$cxx -DKOKKOS_IN_TREE=${KOKKOS_SRC:?} -DKokkos_ENABLE_OPENMP=ON" + run_build $name "${ICPC_CXX:?}" omp "$cxx" + run_build $name "${ICPC_CXX:?}" ocl "$cxx -DOpenCL_LIBRARY=${OCL_LIB:?}" + run_build $name "${ICPC_CXX:?}" raja "$cxx -DRAJA_IN_TREE=${RAJA_SRC:?}" + run_build $name "${ICPC_CXX:?}" kokkos "$cxx -DKOKKOS_IN_TREE=${KOKKOS_SRC:?} -DKokkos_ENABLE_OPENMP=ON" } build_computecpp() { - run_build computecpp_build "compute++" SYCL "-DCMAKE_CXX_COMPILER=${GCC_CXX:?} \ + run_build computecpp_build "compute++" sycl "-DCMAKE_CXX_COMPILER=${GCC_CXX:?} \ -DSYCL_COMPILER=COMPUTECPP \ -DSYCL_COMPILER_DIR=${COMPUTECPP_DIR:?} \ -DOpenCL_LIBRARY=${OCL_LIB:?}" } build_dpcpp() { - run_build intel_build "${DPCPP_DIR:?}" SYCL "-DCMAKE_CXX_COMPILER=${GCC_CXX:?} \ + run_build intel_build "${DPCPP_DIR:?}" sycl "-DCMAKE_CXX_COMPILER=${GCC_CXX:?} \ -DSYCL_COMPILER=DPCPP \ -DSYCL_COMPILER_DIR=${DPCPP_DIR:?}" # for oneAPI BaseKit: # source /opt/intel/oneapi/setvars.sh -force - # run_build intel_build "dpcpp" SYCL "-DCMAKE_CXX_COMPILER=${GCC_CXX:?} -DSYCL_COMPILER=ONEAPI-DPCPP" + # run_build intel_build "dpcpp" sycl "-DCMAKE_CXX_COMPILER=${GCC_CXX:?} -DSYCL_COMPILER=ONEAPI-DPCPP" } build_hipsycl() { - run_build hipsycl_build "syclcc" SYCL " + run_build hipsycl_build "syclcc" sycl " -DSYCL_COMPILER=HIPSYCL \ -DSYCL_COMPILER_DIR=${HIPSYCL_DIR:?}" } diff --git a/cpp/cmake/Modules/ComputeCppCompilerChecks.cmake b/src/cmake/Modules/ComputeCppCompilerChecks.cmake similarity index 100% rename from cpp/cmake/Modules/ComputeCppCompilerChecks.cmake rename to src/cmake/Modules/ComputeCppCompilerChecks.cmake diff --git a/cpp/cmake/Modules/ComputeCppIRMap.cmake b/src/cmake/Modules/ComputeCppIRMap.cmake similarity index 100% rename from cpp/cmake/Modules/ComputeCppIRMap.cmake rename to src/cmake/Modules/ComputeCppIRMap.cmake diff --git a/cpp/cmake/Modules/FindComputeCpp.cmake b/src/cmake/Modules/FindComputeCpp.cmake similarity index 100% rename from cpp/cmake/Modules/FindComputeCpp.cmake rename to src/cmake/Modules/FindComputeCpp.cmake diff --git a/cpp/cmake/toolchains/arm-gcc-poky.cmake b/src/cmake/toolchains/arm-gcc-poky.cmake similarity index 100% rename from cpp/cmake/toolchains/arm-gcc-poky.cmake rename to src/cmake/toolchains/arm-gcc-poky.cmake diff --git a/cpp/cmake/toolchains/gcc-generic.cmake b/src/cmake/toolchains/gcc-generic.cmake similarity index 100% rename from cpp/cmake/toolchains/gcc-generic.cmake rename to src/cmake/toolchains/gcc-generic.cmake diff --git a/cpp/CUDAStream.cu b/src/cuda/CUDAStream.cu similarity index 100% rename from cpp/CUDAStream.cu rename to src/cuda/CUDAStream.cu diff --git a/cpp/CUDAStream.h b/src/cuda/CUDAStream.h similarity index 100% rename from cpp/CUDAStream.h rename to src/cuda/CUDAStream.h diff --git a/cpp/CUDA.make b/src/cuda/Makefile similarity index 88% rename from cpp/CUDA.make rename to src/cuda/Makefile index 90aa77c..153f07d 100644 --- a/cpp/CUDA.make +++ b/src/cuda/Makefile @@ -31,8 +31,8 @@ MEM_PAGEFAULT= -DPAGEFAULT MEM_MODE = $(MEM_$(MEM)) -cuda-stream: main.cpp CUDAStream.cu - $(CUDA_CXX) -std=c++11 $(CXXFLAGS) -arch=$(NVARCH) $(MEM_MODE) -DCUDA $^ $(EXTRA_FLAGS) -o $@ +cuda-stream: ../main.cpp CUDAStream.cu + $(CUDA_CXX) -std=c++11 $(CXXFLAGS) -arch=$(NVARCH) $(MEM_MODE) -DCUDA $^ $(EXTRA_FLAGS) -o $@ -I. -I.. .PHONY: clean clean: diff --git a/cpp/CUDA.cmake b/src/cuda/model.cmake similarity index 100% rename from cpp/CUDA.cmake rename to src/cuda/model.cmake diff --git a/cpp/HIPStream.cpp b/src/hip/HIPStream.cpp similarity index 100% rename from cpp/HIPStream.cpp rename to src/hip/HIPStream.cpp diff --git a/cpp/HIPStream.h b/src/hip/HIPStream.h similarity index 100% rename from cpp/HIPStream.h rename to src/hip/HIPStream.h diff --git a/cpp/HIP.make b/src/hip/Makefile similarity index 76% rename from cpp/HIP.make rename to src/hip/Makefile index 7a1196f..21383b0 100644 --- a/cpp/HIP.make +++ b/src/hip/Makefile @@ -2,8 +2,8 @@ HIP_PATH?= /opt/rocm/hip HIPCC=$(HIP_PATH)/bin/hipcc -hip-stream: main.cpp HIPStream.cpp - $(HIPCC) $(CXXFLAGS) -O3 -std=c++11 -DHIP $^ $(EXTRA_FLAGS) -o $@ +hip-stream: ../main.cpp HIPStream.cpp + $(HIPCC) $(CXXFLAGS) -O3 -std=c++11 -DHIP $^ $(EXTRA_FLAGS) -o $@ -I. -I.. .PHONY: clean clean: diff --git a/cpp/HIP.cmake b/src/hip/model.cmake similarity index 100% rename from cpp/HIP.cmake rename to src/hip/model.cmake diff --git a/cpp/KokkosStream.cpp b/src/kokkos/KokkosStream.cpp similarity index 100% rename from cpp/KokkosStream.cpp rename to src/kokkos/KokkosStream.cpp diff --git a/cpp/KokkosStream.hpp b/src/kokkos/KokkosStream.hpp similarity index 100% rename from cpp/KokkosStream.hpp rename to src/kokkos/KokkosStream.hpp diff --git a/cpp/Kokkos.make b/src/kokkos/Makefile similarity index 85% rename from cpp/Kokkos.make rename to src/kokkos/Makefile index 7dd6af8..98d8597 100644 --- a/cpp/Kokkos.make +++ b/src/kokkos/Makefile @@ -71,7 +71,7 @@ CXX = $(NVCC_WRAPPER) endif endif -OBJ = main.o KokkosStream.o +OBJ = KokkosStream.o CXXFLAGS = -O3 LINKFLAGS = # empty for now @@ -85,14 +85,15 @@ endif endif include $(KOKKOS_PATH)/Makefile.kokkos +HEADERS = $(wildcard $(MAKEFILE_PATH)*.hpp) -kokkos-stream: $(OBJ) $(KOKKOS_LINK_DEPENDS) - $(CXX) $(KOKKOS_LDFLAGS) $(LINKFLAGS) $(EXTRA_PATH) $(OBJ) $(KOKKOS_LIBS) $(LIB) -DKOKKOS -o $@ +kokkos-stream: ../main.cpp $(OBJ) $(KOKKOS_LINK_DEPENDS) + $(CXX) $(KOKKOS_LDFLAGS) $(LINKFLAGS) $(EXTRA_PATH) $(OBJ) $(KOKKOS_LIBS) $(LIB) -DKOKKOS -o $@ -I. -I.. -%.o: %.cpp $(KOKKOS_CPP_DEPENDS) - $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) $(EXTRA_INC) -DKOKKOS -c $< +%.o: %.cpp $(KOKKOS_CPP_DEPENDS) $(HEADERS) + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) $(EXTRA_INC) -c $< -o $(notdir $@) .PHONY: clean clean: - rm -f kokkos-stream main.o KokkosStream.o Kokkos_*.o + rm -f kokkos-stream main.o KokkosStream.o Kokkos_*.o KokkosCore_* diff --git a/cpp/KOKKOS.cmake b/src/kokkos/model.cmake similarity index 100% rename from cpp/KOKKOS.cmake rename to src/kokkos/model.cmake diff --git a/cpp/main.cpp b/src/main.cpp similarity index 100% rename from cpp/main.cpp rename to src/main.cpp diff --git a/cpp/OpenCL.make b/src/ocl/Makefile similarity index 85% rename from cpp/OpenCL.make rename to src/ocl/Makefile index 8ad7108..20cd257 100644 --- a/cpp/OpenCL.make +++ b/src/ocl/Makefile @@ -30,8 +30,8 @@ else LIBS = -lOpenCL endif -ocl-stream: main.cpp OCLStream.cpp - $(CXX) $(CXXFLAGS) -DOCL $^ $(EXTRA_FLAGS) $(LIBS) -o $@ +ocl-stream: ../main.cpp OCLStream.cpp + $(CXX) $(CXXFLAGS) -DOCL $^ $(EXTRA_FLAGS) $(LIBS) -o $@ -I. -I.. .PHONY: clean clean: diff --git a/cpp/OCLStream.cpp b/src/ocl/OCLStream.cpp similarity index 100% rename from cpp/OCLStream.cpp rename to src/ocl/OCLStream.cpp diff --git a/cpp/OCLStream.h b/src/ocl/OCLStream.h similarity index 100% rename from cpp/OCLStream.h rename to src/ocl/OCLStream.h diff --git a/cpp/OCL.cmake b/src/ocl/model.cmake similarity index 100% rename from cpp/OCL.cmake rename to src/ocl/model.cmake diff --git a/cpp/OpenMP.make b/src/omp/Makefile similarity index 95% rename from cpp/OpenMP.make rename to src/omp/Makefile index dde3f75..2d8545c 100644 --- a/cpp/OpenMP.make +++ b/src/omp/Makefile @@ -91,8 +91,8 @@ endif OMP = $(OMP_$(COMPILER)_$(TARGET)) -omp-stream: main.cpp OMPStream.cpp - $(CXX) $(CXXFLAGS) -DOMP $^ $(OMP) $(EXTRA_FLAGS) -o $@ +omp-stream: ../main.cpp OMPStream.cpp + $(CXX) $(CXXFLAGS) -DOMP $^ $(OMP) $(EXTRA_FLAGS) -o $@ -I. -I.. .PHONY: clean clean: diff --git a/cpp/OMPStream.cpp b/src/omp/OMPStream.cpp similarity index 100% rename from cpp/OMPStream.cpp rename to src/omp/OMPStream.cpp diff --git a/cpp/OMPStream.h b/src/omp/OMPStream.h similarity index 100% rename from cpp/OMPStream.h rename to src/omp/OMPStream.h diff --git a/cpp/OMP.cmake b/src/omp/model.cmake similarity index 100% rename from cpp/OMP.cmake rename to src/omp/model.cmake diff --git a/cpp/RAJA.make b/src/raja/Makefile similarity index 92% rename from cpp/RAJA.make rename to src/raja/Makefile index 47aeefb..60f2319 100644 --- a/cpp/RAJA.make +++ b/src/raja/Makefile @@ -49,8 +49,8 @@ endif CXXFLAGS = --expt-extended-lambda -O3 -std=c++11 -x cu -Xcompiler -fopenmp -arch $(ARCH) endif -raja-stream: main.cpp RAJAStream.cpp - $(CXX) $(CXXFLAGS) -DUSE_RAJA -I$(RAJA_PATH)/include $^ $(EXTRA_FLAGS) -L$(RAJA_PATH)/lib -lRAJA -o $@ +raja-stream: ../main.cpp RAJAStream.cpp + $(CXX) $(CXXFLAGS) -DUSE_RAJA -I$(RAJA_PATH)/include $^ $(EXTRA_FLAGS) -L$(RAJA_PATH)/lib -lRAJA -o $@ -I. -I.. .PHONY: clean clean: diff --git a/cpp/RAJAStream.cpp b/src/raja/RAJAStream.cpp similarity index 100% rename from cpp/RAJAStream.cpp rename to src/raja/RAJAStream.cpp diff --git a/cpp/RAJAStream.hpp b/src/raja/RAJAStream.hpp similarity index 100% rename from cpp/RAJAStream.hpp rename to src/raja/RAJAStream.hpp diff --git a/cpp/RAJA.cmake b/src/raja/model.cmake similarity index 100% rename from cpp/RAJA.cmake rename to src/raja/model.cmake diff --git a/cpp/register_models.cmake b/src/register_models.cmake similarity index 93% rename from cpp/register_models.cmake rename to src/register_models.cmake index 82e7243..247612a 100644 --- a/cpp/register_models.cmake +++ b/src/register_models.cmake @@ -118,22 +118,24 @@ endfunction() macro(register_model NAME PREPROCESSOR_NAME) - string(TOUPPER ${NAME} MODEL_UPPER) list(APPEND REGISTERED_MODELS "${NAME}") - list(APPEND IMPL_${MODEL_UPPER}_SOURCES "${ARGN}") + string(TOUPPER ${NAME} MODEL_UPPER) + list(APPEND IMPL_${MODEL_UPPER}_SOURCES "${NAME}/${ARGN}") list(APPEND IMPL_${MODEL_UPPER}_DEFINITIONS "${PREPROCESSOR_NAME}") endmacro() macro(load_model MODEL) - string(TOUPPER "${MODEL}" MODEL_UPPER) - if ("${MODEL_UPPER}" IN_LIST REGISTERED_MODELS) - set(MODEL_FILE ${CMAKE_CURRENT_SOURCE_DIR}/${MODEL_UPPER}.cmake) + if ("${MODEL}" IN_LIST REGISTERED_MODELS) + string(TOLOWER "${MODEL}" MODEL_LOWER) + set(MODEL_FILE ${CMAKE_CURRENT_SOURCE_DIR}/${MODEL_LOWER}/model.cmake) + include_directories(${CMAKE_CURRENT_SOURCE_DIR}/${MODEL_LOWER}) if (NOT EXISTS ${MODEL_FILE}) message(FATAL_ERROR "${MODEL_FILE} not found, perhaps it needs to be implemented?") endif () include(${MODEL_FILE}) + string(TOUPPER "${MODEL}" MODEL_UPPER) list(APPEND IMPL_SOURCES ${IMPL_${MODEL_UPPER}_SOURCES}) list(APPEND IMPL_DEFINITIONS ${IMPL_${MODEL_UPPER}_DEFINITIONS}) diff --git a/cpp/STD.make b/src/std/Makefile similarity index 72% rename from cpp/STD.make rename to src/std/Makefile index 3225a08..a5a8847 100644 --- a/cpp/STD.make +++ b/src/std/Makefile @@ -6,8 +6,8 @@ CXXFLAGS=-O3 -std=c++17 -stdpar -DSTD STD_CXX=nvc++ -std-stream: main.cpp STDStream.cpp - $(STD_CXX) $(CXXFLAGS) $^ $(EXTRA_FLAGS) -o $@ +std-stream: ../main.cpp STDStream.cpp + $(STD_CXX) $(CXXFLAGS) $^ $(EXTRA_FLAGS) -o $@ -I. -I.. .PHONY: clean clean: diff --git a/cpp/STDStream.cpp b/src/std/STDStream.cpp similarity index 100% rename from cpp/STDStream.cpp rename to src/std/STDStream.cpp diff --git a/cpp/STDStream.h b/src/std/STDStream.h similarity index 100% rename from cpp/STDStream.h rename to src/std/STDStream.h diff --git a/cpp/STD.cmake b/src/std/model.cmake similarity index 100% rename from cpp/STD.cmake rename to src/std/model.cmake diff --git a/cpp/STD20.make b/src/std20/Makefile similarity index 76% rename from cpp/STD20.make rename to src/std20/Makefile index eced9f7..3a93bcb 100644 --- a/cpp/STD20.make +++ b/src/std20/Makefile @@ -17,8 +17,8 @@ FLAGS_GNU = -O3 -std=c++2a -march=native CXXFLAGS = $(FLAGS_$(COMPILER)) -std20-stream: main.cpp STD20Stream.cpp - $(CXX) -DSTD20 $(CXXFLAGS) $^ $(EXTRA_FLAGS) -o $@ +std20-stream: ../main.cpp STD20Stream.cpp + $(CXX) -DSTD20 $(CXXFLAGS) $^ $(EXTRA_FLAGS) -o $@ -I. -I.. .PHONY: clean clean: diff --git a/cpp/STD20Stream.cpp b/src/std20/STD20Stream.cpp similarity index 100% rename from cpp/STD20Stream.cpp rename to src/std20/STD20Stream.cpp diff --git a/cpp/STD20Stream.hpp b/src/std20/STD20Stream.hpp similarity index 100% rename from cpp/STD20Stream.hpp rename to src/std20/STD20Stream.hpp diff --git a/cpp/STD20.cmake b/src/std20/model.cmake similarity index 100% rename from cpp/STD20.cmake rename to src/std20/model.cmake diff --git a/cpp/SYCL.make b/src/sycl/Makefile similarity index 96% rename from cpp/SYCL.make rename to src/sycl/Makefile index 58df8d0..05d2022 100644 --- a/cpp/SYCL.make +++ b/src/sycl/Makefile @@ -73,8 +73,8 @@ SYCL_LINK_FLAGS = $(SYCL_$(COMPILER)_LINK_FLAGS) SYCL_INCLUDE = $(SYCL_$(COMPILER)_INCLUDE) # only ComputeCpp generates .sycl files which is a bit odd to deal with so we opted to compile everything together -sycl-stream: main.cpp SYCLStream.cpp - $(SYCL_SYCLCXX) $(SYCL_SYCLFLAGS) $(SYCL_FLAGS) $(SYCL_INCLUDE) -DSYCL $(EXTRA_FLAGS) $(SYCL_LINK_FLAGS) $^ -o $@ +sycl-stream: ../main.cpp SYCLStream.cpp + $(SYCL_SYCLCXX) $(SYCL_SYCLFLAGS) $(SYCL_FLAGS) $(SYCL_INCLUDE) -DSYCL $(EXTRA_FLAGS) $(SYCL_LINK_FLAGS) $^ -o $@ -I. -I.. .PHONY: clean clean: diff --git a/cpp/SYCLStream.cpp b/src/sycl/SYCLStream.cpp similarity index 100% rename from cpp/SYCLStream.cpp rename to src/sycl/SYCLStream.cpp diff --git a/cpp/SYCLStream.h b/src/sycl/SYCLStream.h similarity index 100% rename from cpp/SYCLStream.h rename to src/sycl/SYCLStream.h diff --git a/cpp/SYCL.cmake b/src/sycl/model.cmake similarity index 100% rename from cpp/SYCL.cmake rename to src/sycl/model.cmake