mirror of
https://github.com/NVIDIA/nvbench.git
synced 2026-03-14 20:27:24 +00:00
Add export tests.
This commit is contained in:
@@ -1,6 +1,10 @@
|
||||
# 3.20.1 required for rapids-cmake
|
||||
cmake_minimum_required(VERSION 3.20.1)
|
||||
|
||||
set(CMAKE_CXX_STANDARD 17)
|
||||
set(CMAKE_CUDA_STANDARD 17)
|
||||
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
|
||||
|
||||
include(cmake/NVBenchRapidsCMake.cmake)
|
||||
nvbench_load_rapids_cmake()
|
||||
|
||||
@@ -15,12 +19,10 @@ include(cmake/NVBenchConfigTarget.cmake)
|
||||
include(cmake/NVBenchDependencies.cmake)
|
||||
include(cmake/NVBenchExports.cmake)
|
||||
include(cmake/NVBenchInstallRules.cmake)
|
||||
include(cmake/NVBenchUtilities.cmake)
|
||||
|
||||
message(STATUS "NVBench CUDA architectures: ${CMAKE_CUDA_ARCHITECTURES}")
|
||||
|
||||
set(CMAKE_CXX_STANDARD 17)
|
||||
set(CMAKE_CUDA_STANDARD 17)
|
||||
|
||||
option(NVBench_ENABLE_TESTING "Build NVBench testing suite." OFF)
|
||||
option(NVBench_ENABLE_EXAMPLES "Build NVBench examples." OFF)
|
||||
|
||||
|
||||
14
cmake/NVBenchUtilities.cmake
Normal file
14
cmake/NVBenchUtilities.cmake
Normal file
@@ -0,0 +1,14 @@
|
||||
# Writes CMAKE_CUDA_ARCHITECTURES to out_var, but using escaped semicolons
|
||||
# as delimiters
|
||||
function(nvbench_escaped_cuda_arches out_var)
|
||||
set(tmp)
|
||||
set(first TRUE)
|
||||
foreach(arg IN LISTS CMAKE_CUDA_ARCHITECTURES)
|
||||
if (NOT first)
|
||||
string(APPEND tmp "\;")
|
||||
endif()
|
||||
string(APPEND tmp "${arg}")
|
||||
set(first FALSE)
|
||||
endforeach()
|
||||
set(${out_var} "${tmp}" PARENT_SCOPE)
|
||||
endfunction()
|
||||
@@ -34,3 +34,5 @@ foreach(test_src IN LISTS test_srcs)
|
||||
|
||||
add_dependencies(nvbench.test.all ${test_name})
|
||||
endforeach()
|
||||
|
||||
add_subdirectory(cmake)
|
||||
|
||||
79
testing/cmake/CMakeLists.txt
Normal file
79
testing/cmake/CMakeLists.txt
Normal file
@@ -0,0 +1,79 @@
|
||||
if ("MSVC" STREQUAL "${CMAKE_CXX_COMPILER_ID}")
|
||||
# There's a bug that prevents build-and-test from working on MSVC.
|
||||
# See NVIDIA/nvbench#43.
|
||||
return()
|
||||
endif()
|
||||
|
||||
# Need to escape the semicolons in CUDA_ARCHITECTURES or the tests break:
|
||||
nvbench_escaped_cuda_arches(arches)
|
||||
|
||||
set(cmake_opts
|
||||
-D "CMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}"
|
||||
-D "CMAKE_MAKE_PROGRAM=${CMAKE_MAKE_PROGRAM}"
|
||||
-D "CMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}"
|
||||
-D "CMAKE_CUDA_COMPILER=${CMAKE_CUDA_COMPILER}"
|
||||
-D "CMAKE_CUDA_ARCHITECTURES=${arches}"
|
||||
)
|
||||
|
||||
# Temporary installation prefix for tests against installed nvbench:
|
||||
set(tmp_install_prefix "${CMAKE_CURRENT_BINARY_DIR}/test_nvbench_install")
|
||||
|
||||
# Add a build-and-test CTest.
|
||||
# - full_test_name_var will be set to the full name of the test.
|
||||
# - subdir is the relative path to the test project directory.
|
||||
# - test_id is used to generate a unique name for this test, allowing the
|
||||
# subdir to be reused.
|
||||
# - Any additional args will be passed to the project configure step.
|
||||
function(nvbench_add_compile_test full_test_name_var subdir test_id)
|
||||
set(test_name nvbench.test.cmake.${subdir}.${test_id})
|
||||
set(src_dir "${CMAKE_CURRENT_SOURCE_DIR}/${subdir}")
|
||||
set(build_dir "${CMAKE_CURRENT_BINARY_DIR}/${subdir}/${test_id}")
|
||||
add_test(NAME ${test_name}
|
||||
COMMAND "${CMAKE_CTEST_COMMAND}"
|
||||
--build-and-test "${src_dir}" "${build_dir}"
|
||||
--build-generator "${CMAKE_GENERATOR}"
|
||||
--build-options
|
||||
${cmake_opts}
|
||||
${ARGN}
|
||||
--test-command "${CMAKE_CTEST_COMMAND}" --output-on-failure
|
||||
)
|
||||
set(${full_test_name_var} ${test_name} PARENT_SCOPE)
|
||||
endfunction()
|
||||
|
||||
################################################################################
|
||||
# Test against build tree export
|
||||
|
||||
nvbench_add_compile_test(test_name
|
||||
test_export
|
||||
build_tree
|
||||
-D "NVBench_DIR=${NVBench_BINARY_DIR}"
|
||||
)
|
||||
|
||||
################################################################################
|
||||
# Test against install tree export
|
||||
|
||||
nvbench_add_compile_test(test_name
|
||||
test_export
|
||||
install_tree
|
||||
# "rapids_export() always installs to lib" per rapids_export docs
|
||||
-D "NVBench_DIR=${tmp_install_prefix}/lib/cmake/nvbench/"
|
||||
)
|
||||
set_tests_properties(${test_name} PROPERTIES FIXTURES_REQUIRED install_tree)
|
||||
|
||||
################################################################################
|
||||
# Install tree fixtures
|
||||
add_test(NAME nvbench.test.cmake.install_tree.install
|
||||
COMMAND "${CMAKE_COMMAND}"
|
||||
--install "${NVBench_BINARY_DIR}"
|
||||
--prefix "${tmp_install_prefix}"
|
||||
)
|
||||
set_tests_properties(nvbench.test.cmake.install_tree.install PROPERTIES
|
||||
FIXTURES_SETUP install_tree
|
||||
)
|
||||
|
||||
add_test(NAME nvbench.test.cmake.install_tree.cleanup
|
||||
COMMAND "${CMAKE_COMMAND}" -E rm -rf "${tmp_install_prefix}"
|
||||
)
|
||||
set_tests_properties(nvbench.test.cmake.install_tree.cleanup PROPERTIES
|
||||
FIXTURES_CLEANUP install_tree
|
||||
)
|
||||
10
testing/cmake/test_export/CMakeLists.txt
Normal file
10
testing/cmake/test_export/CMakeLists.txt
Normal file
@@ -0,0 +1,10 @@
|
||||
cmake_minimum_required(VERSION 3.20.1)
|
||||
project(NVBenchTestExport CUDA CXX)
|
||||
|
||||
message(STATUS "NVBench_DIR=${NVBench_DIR}")
|
||||
find_package(NVBench)
|
||||
|
||||
add_executable(test_bench test_bench.cu)
|
||||
target_link_libraries(test_bench PRIVATE nvbench::main)
|
||||
enable_testing()
|
||||
add_test(NAME test COMMAND "$<TARGET_FILE:test_bench>" --timeout 1)
|
||||
13
testing/cmake/test_export/test_bench.cu
Normal file
13
testing/cmake/test_export/test_bench.cu
Normal file
@@ -0,0 +1,13 @@
|
||||
#include <nvbench/nvbench.cuh>
|
||||
|
||||
// Grab some testing kernels from NVBench:
|
||||
#include <nvbench/test_kernels.cuh>
|
||||
|
||||
void simple(nvbench::state &state)
|
||||
{
|
||||
state.exec([](nvbench::launch &launch) {
|
||||
// Sleep for 1 millisecond:
|
||||
nvbench::sleep_kernel<<<1, 1, 0, launch.get_stream()>>>(1e-3);
|
||||
});
|
||||
}
|
||||
NVBENCH_BENCH(simple);
|
||||
Reference in New Issue
Block a user