diff --git a/.github/workflows/cmake.yml b/.github/workflows/cmake.yml index c3c22b99..8cd10d92 100644 --- a/.github/workflows/cmake.yml +++ b/.github/workflows/cmake.yml @@ -40,31 +40,33 @@ jobs: curl --url ${{ matrix.compiler_url }} --output download.sh sudo sh -x download.sh -s -a -s --action install --eula accept - name: Install gtest manually - run: sudo apt-get install libgtest-dev && cd /usr/src/gtest && sudo cmake CMakeLists.txt && sudo make && sudo cp lib/*.a /usr/lib && sudo ln -s /usr/lib/libgtest.a /usr/local/lib/libgtest.a && sudo ln -s /usr/lib/libgtest_main.a /usr/local/lib/libgtest_main.a + run: | + sudo apt-get install libgtest-dev && cd /usr/src/gtest && sudo cmake CMakeLists.txt && sudo make && sudo cp lib/*.a /usr/lib && sudo ln -s /usr/lib/libgtest.a /usr/local/lib/libgtest.a && sudo ln -s /usr/lib/libgtest_main.a /usr/local/lib/libgtest_main.a + sudo apt install libbenchmark1 libbenchmark-dev - name: Create Build Environment run: cmake -E make_directory ${{github.workspace}}/mdspan-build - + - name: Check Out uses: actions/checkout@v2 with: path: ${{github.workspace}}/mdspan-src - + - name: Configure CMake shell: bash working-directory: ${{github.workspace}}/mdspan-build - run: CXX=${{ matrix.compiler_prefix}}/${{ matrix.compiler_driver }} cmake $GITHUB_WORKSPACE/mdspan-src -DCMAKE_BUILD_TYPE=$BUILD_TYPE -DCMAKE_INSTALL_PREFIX=$GITHUB_WORKSPACE/mdspan-install -DMDSPAN_ENABLE_TESTS=ON -DMDSPAN_ENABLE_EXAMPLES=ON -DCMAKE_CXX_FLAGS=${{matrix.cxx_flags_extra}} - + run: CXX=${{ matrix.compiler_prefix}}/${{ matrix.compiler_driver }} cmake $GITHUB_WORKSPACE/mdspan-src -DMDSPAN_CXX_STANDARD=17 -DCMAKE_BUILD_TYPE=$BUILD_TYPE -DCMAKE_INSTALL_PREFIX=$GITHUB_WORKSPACE/mdspan-install -DMDSPAN_ENABLE_TESTS=ON -DMDSPAN_ENABLE_EXAMPLES=ON -DMDSPAN_ENABLE_BENCHMARKS=ON -DMDSPAN_ENABLE_COMP_BENCH=ON -DCMAKE_CXX_FLAGS=${{matrix.cxx_flags_extra}} + - name: Build shell: bash working-directory: ${{github.workspace}}/mdspan-build run: make -j - + - name: Test working-directory: ${{github.workspace}}/mdspan-build shell: bash - run: ctest - + run: ctest --output-on-failure + - name: Install shell: bash working-directory: ${{github.workspace}}/mdspan-build diff --git a/benchmarks/CMakeLists.txt b/benchmarks/CMakeLists.txt index 708cc9f3..ce0b7453 100644 --- a/benchmarks/CMakeLists.txt +++ b/benchmarks/CMakeLists.txt @@ -5,6 +5,8 @@ function(mdspan_add_benchmark EXENAME) target_include_directories(${EXENAME} PUBLIC $ ) + # Set flag to build with parenthesis enabled + target_compile_definitions(${EXENAME} PRIVATE MDSPAN_USE_PAREN_OPERATOR=1) endfunction() find_package(benchmark REQUIRED) @@ -42,6 +44,7 @@ function(mdspan_add_cuda_benchmark EXENAME) string(REPLACE "-pthread" "" _benchmark_libs "${_benchmark_libs_old}") target_include_directories(${EXENAME} PUBLIC "${_benchmark_include}") target_link_libraries(${EXENAME} PUBLIC "${_benchmark_libs};${_benchmark_libs_imported}") + target_compile_definitions(${EXENAME} PRIVATE MDSPAN_USE_PAREN_OPERATOR=1) if(_benchmark_libs_old MATCHES "-pthread") target_compile_options(${EXENAME} PUBLIC "-Xcompiler=-pthread") endif() @@ -59,6 +62,7 @@ function(mdspan_add_openmp_benchmark EXENAME) target_include_directories(${EXENAME} PUBLIC $ ) + target_compile_definitions(${EXENAME} PRIVATE MDSPAN_USE_PAREN_OPERATOR=1) else() message(WARNING "Not adding target ${EXENAME} because OpenMP was not found") endif() diff --git a/comp_bench/CMakeLists.txt b/comp_bench/CMakeLists.txt index 667b94f6..b58adf2a 100644 --- a/comp_bench/CMakeLists.txt +++ b/comp_bench/CMakeLists.txt @@ -1,10 +1,23 @@ include(metabench) +# C++ standards that our benchmark will actually support +set(_cbench_supported_standards 17 20 23) + +# Obtain the subset that are actually supported by the compiler +set(_cbench_standards "") +foreach(_std IN LISTS _cbench_supported_standards) + if ("cxx_std_${_std}" IN_LIST CMAKE_CXX_COMPILE_FEATURES) + list(APPEND _cbench_standards "${_std}") + endif() +endforeach() + +message(STATUS "Using the following C++ standards for compiler benchmarking: ${_cbench_standards}") + function(add_cxx_comparison name template range) set(all_datasets) - foreach(std IN ITEMS 11 14 17) + foreach(std IN LISTS _cbench_standards) metabench_add_dataset( ${name}_${std} ${template} @@ -12,6 +25,9 @@ function(add_cxx_comparison name template range) MEDIAN_OF 3 ) target_link_libraries(${name}_${std} mdspan) + # Set parenthesis operator regardless of which standard we are using + # so we don't have to ifdef + target_compile_definitions(${name}_${std} PRIVATE MDSPAN_USE_PAREN_OPERATOR=1) set_property(TARGET ${name}_${std} PROPERTY CXX_STANDARD ${std}) set(all_datasets ${all_datasets} ${name}_${std}) endforeach() diff --git a/comp_bench/cbench_submdspan.cpp.erb b/comp_bench/cbench_submdspan.cpp.erb index 1f789dad..7c894b28 100644 --- a/comp_bench/cbench_submdspan.cpp.erb +++ b/comp_bench/cbench_submdspan.cpp.erb @@ -4,13 +4,13 @@ int test(int* data) { #if defined(METABENCH) auto sub0 = Kokkos::mdspan > >(data); <% (32/n).times do |k| %> auto <%= "sub0_#{k}" %> = Kokkos::mdspan > >(data);