From c7f6f8315fdae9d7b20f03e8ed1d9f5dea7f51d5 Mon Sep 17 00:00:00 2001 From: Antonio Sanchez Date: Thu, 13 Mar 2025 21:49:24 +0000 Subject: [PATCH] Update CUDA testing infra to match master branch. --- CMakeLists.txt | 6 +- cmake/EigenTesting.cmake | 20 +++--- test/CMakeLists.txt | 116 +++++++++++++++++--------------- unsupported/test/CMakeLists.txt | 66 ++++++++---------- 4 files changed, 102 insertions(+), 106 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index a03780332..a10a7fd7e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,7 +1,7 @@ -project(Eigen3) - cmake_minimum_required(VERSION 2.8.5) +project(Eigen3) + # guard against in-source builds if(${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_BINARY_DIR}) @@ -470,7 +470,7 @@ if (NOT CMAKE_CROSSCOMPILING) add_subdirectory(blas EXCLUDE_FROM_ALL) add_subdirectory(lapack EXCLUDE_FROM_ALL) endif() -endif(CMAKE_CROSSCOMPILING) +endif(NOT CMAKE_CROSSCOMPILING) # add SYCL option(EIGEN_TEST_SYCL "Add Sycl support." OFF) diff --git a/cmake/EigenTesting.cmake b/cmake/EigenTesting.cmake index 77706e98e..d12724bb4 100644 --- a/cmake/EigenTesting.cmake +++ b/cmake/EigenTesting.cmake @@ -23,23 +23,21 @@ macro(ei_add_test_internal testname testname_with_suffix) set(is_gpu_test ON) if(EIGEN_TEST_CUDA_CLANG) set_source_files_properties(${filename} PROPERTIES LANGUAGE CXX) + if(CUDA_64_BIT_DEVICE_CODE AND (EXISTS "${CUDA_TOOLKIT_ROOT_DIR}/lib64")) link_directories("${CUDA_TOOLKIT_ROOT_DIR}/lib64") else() link_directories("${CUDA_TOOLKIT_ROOT_DIR}/lib") endif() - if (${ARGC} GREATER 2) - add_executable(${targetname} ${filename}) - else() - add_executable(${targetname} ${filename} OPTIONS ${ARGV2}) + + add_executable(${targetname} ${filename}) + set(CUDA_CLANG_LINK_LIBRARIES "cudart_static" "cuda" "dl" "pthread") + if (CMAKE_SYSTEM_NAME STREQUAL "Linux") + set(CUDA_CLANG_LINK_LIBRARIES ${CUDA_CLANG_LINK_LIBRARIES} "rt") endif() - target_link_libraries(${targetname} "cudart_static" "cuda" "dl" "rt" "pthread") + target_link_libraries(${targetname} ${CUDA_CLANG_LINK_LIBRARIES}) else() - if (${ARGC} GREATER 2) - cuda_add_executable(${targetname} ${filename} OPTIONS ${ARGV2}) - else() - cuda_add_executable(${targetname} ${filename}) - endif() + cuda_add_executable(${targetname} ${filename}) endif() else() add_executable(${targetname} ${filename}) @@ -48,7 +46,7 @@ macro(ei_add_test_internal testname testname_with_suffix) if (targetname MATCHES "^eigen2_") add_dependencies(eigen2_buildtests ${targetname}) else() - add_dependencies(buildtests ${targetname}) + add_dependencies(buildtests ${targetname}) endif() if (is_gpu_test) add_dependencies(buildtests_gpu ${targetname}) diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 5d1fa9cf1..014e6a432 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -21,7 +21,7 @@ workaround_9220(Fortran EIGEN_Fortran_COMPILER_WORKS) if(EIGEN_Fortran_COMPILER_WORKS) enable_language(Fortran OPTIONAL) if(NOT CMAKE_Fortran_COMPILER) - set(EIGEN_Fortran_COMPILER_WORKS OFF) + set(EIGEN_Fortran_COMPILER_WORKS OFF) endif() endif() @@ -288,8 +288,8 @@ ei_add_test(fastmath " ${EIGEN_FASTMATH_FLAGS} ") # # ei_add_test(denseLM) if (NOT CMAKE_CROSSCOMPILING) - if(QT4_FOUND) - ei_add_test(qtvector "" "${QT_QTCORE_LIBRARY}") +if(QT4_FOUND) + ei_add_test(qtvector "" "${QT_QTCORE_LIBRARY}") endif(QT4_FOUND) if(UMFPACK_FOUND) @@ -302,23 +302,23 @@ if (NOT CMAKE_CROSSCOMPILING) if(CHOLMOD_FOUND) ei_add_test(cholmod_support "" "${CHOLMOD_ALL_LIBS}") - endif() +endif() - if(PARDISO_FOUND) - ei_add_test(pardiso_support "" "${PARDISO_ALL_LIBS}") - endif() +if(PARDISO_FOUND) + ei_add_test(pardiso_support "" "${PARDISO_ALL_LIBS}") +endif() - if(PASTIX_FOUND AND (SCOTCH_FOUND OR METIS_FOUND)) - ei_add_test(pastix_support "" "${PASTIX_ALL_LIBS}") - endif() +if(PASTIX_FOUND AND (SCOTCH_FOUND OR METIS_FOUND)) + ei_add_test(pastix_support "" "${PASTIX_ALL_LIBS}") +endif() if(SPQR_FOUND AND CHOLMOD_FOUND AND EIGEN_TEST_CXX11) - ei_add_test(spqr_support "" "${SPQR_ALL_LIBS}") - endif() + ei_add_test(spqr_support "" "${SPQR_ALL_LIBS}") +endif() - if(METIS_FOUND) - ei_add_test(metis_support "" "${METIS_LIBRARIES}") - endif() +if(METIS_FOUND) +ei_add_test(metis_support "" "${METIS_LIBRARIES}") +endif() endif() string(TOLOWER "${CMAKE_CXX_COMPILER}" cmake_cxx_compiler_tolower) @@ -359,51 +359,57 @@ if(EIGEN_TEST_CUDA_CLANG AND NOT CMAKE_CXX_COMPILER MATCHES "clang") message(WARNING "EIGEN_TEST_CUDA_CLANG is set, but CMAKE_CXX_COMPILER does not appear to be clang.") endif() -if(EIGEN_TEST_CUDA) +if (EIGEN_TEST_CUDA) -find_package(CUDA 5.0) -if(CUDA_FOUND) - - if( (NOT EIGEN_TEST_CXX11) OR (CMAKE_VERSION VERSION_LESS 3.3)) - if (MSVC) - string(APPEND EIGEN_CUDA_CXX11_FLAGS " /std:c++11") - else() - string(APPEND EIGEN_CUDA_CXX11_FLAGS " -std=c++11") - endif(MSVC) - endif() - - if(EIGEN_TEST_CUDA_CLANG) - string(APPEND CMAKE_CXX_FLAGS " --cuda-path=${CUDA_TOOLKIT_ROOT_DIR}") - foreach(GPU IN LISTS EIGEN_CUDA_COMPUTE_ARCH) - string(APPEND CMAKE_CXX_FLAGS " --cuda-gpu-arch=sm_${GPU}") - endforeach() - string(APPEND CMAKE_CXX_FLAGS " ${EIGEN_CUDA_CXX_FLAGS}") - else() - set(CUDA_PROPAGATE_HOST_FLAGS OFF) - set(NVCC_ARCH_FLAGS) - # Define an -arch=sm_, otherwise if GPU does not exactly match one of - # those in the arch list for -gencode, the kernels will fail to run with - # cudaErrorNoKernelImageForDevice - # This can happen with newer cards (e.g. sm_75) and compiling with older - # versions of nvcc (e.g. 9.2) that do not support their specific arch. - list(LENGTH EIGEN_CUDA_COMPUTE_ARCH EIGEN_CUDA_COMPUTE_ARCH_SIZE) - if(EIGEN_CUDA_COMPUTE_ARCH_SIZE) - list(GET EIGEN_CUDA_COMPUTE_ARCH 0 EIGEN_CUDA_COMPUTE_DEFAULT) - set(NVCC_ARCH_FLAGS " -arch=sm_${EIGEN_CUDA_COMPUTE_DEFAULT}") + find_package(CUDA 9.0) + if(CUDA_FOUND) + # Make sure to compile without the -pedantic, -Wundef, -Wnon-virtual-dtor + # and -fno-check-new flags since they trigger thousands of compilation warnings + # in the CUDA runtime + string(REPLACE "-pedantic" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") + string(REPLACE "-Wundef" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") + string(REPLACE "-Wnon-virtual-dtor" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") + string(REPLACE "-fno-check-new" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") + if( (NOT EIGEN_TEST_CXX11) OR (CMAKE_VERSION VERSION_LESS 3.3)) + if (MSVC) + string(APPEND EIGEN_CUDA_CXX11_FLAGS " /std:c++11") + else() + string(APPEND EIGEN_CUDA_CXX11_FLAGS " -std=c++11") + endif(MSVC) endif() - foreach(ARCH IN LISTS EIGEN_CUDA_COMPUTE_ARCH) - string(APPEND NVCC_ARCH_FLAGS " -gencode arch=compute_${ARCH},code=sm_${ARCH}") - endforeach() - set(CUDA_NVCC_FLAGS "--expt-relaxed-constexpr -Xcudafe \"--display_error_number\" ${NVCC_ARCH_FLAGS} ${CUDA_NVCC_FLAGS} ${EIGEN_CUDA_CXX_FLAGS}") - cuda_include_directories("${CMAKE_CURRENT_BINARY_DIR}" "${CUDA_TOOLKIT_ROOT_DIR}/include") - endif() - set(EIGEN_ADD_TEST_FILENAME_EXTENSION "cu") - ei_add_test(cuda_basic) + if(EIGEN_TEST_CUDA_CLANG) + string(APPEND CMAKE_CXX_FLAGS " --cuda-path=${CUDA_TOOLKIT_ROOT_DIR}") + foreach(GPU IN LISTS EIGEN_CUDA_COMPUTE_ARCH) + string(APPEND CMAKE_CXX_FLAGS " --cuda-gpu-arch=sm_${GPU}") + endforeach() + string(APPEND CMAKE_CXX_FLAGS " ${EIGEN_CUDA_CXX_FLAGS}") + else() + set(CUDA_PROPAGATE_HOST_FLAGS OFF) + set(NVCC_ARCH_FLAGS) + # Define an -arch=sm_, otherwise if GPU does not exactly match one of + # those in the arch list for -gencode, the kernels will fail to run with + # cudaErrorNoKernelImageForDevice + # This can happen with newer cards (e.g. sm_75) and compiling with older + # versions of nvcc (e.g. 9.2) that do not support their specific arch. + list(LENGTH EIGEN_CUDA_COMPUTE_ARCH EIGEN_CUDA_COMPUTE_ARCH_SIZE) + if(EIGEN_CUDA_COMPUTE_ARCH_SIZE) + list(GET EIGEN_CUDA_COMPUTE_ARCH 0 EIGEN_CUDA_COMPUTE_DEFAULT) + set(NVCC_ARCH_FLAGS " -arch=sm_${EIGEN_CUDA_COMPUTE_DEFAULT}") + endif() + foreach(ARCH IN LISTS EIGEN_CUDA_COMPUTE_ARCH) + string(APPEND NVCC_ARCH_FLAGS " -gencode arch=compute_${ARCH},code=sm_${ARCH}") + endforeach() + set(CUDA_NVCC_FLAGS "--expt-relaxed-constexpr -Xcudafe \"--display_error_number\" ${NVCC_ARCH_FLAGS} ${CUDA_NVCC_FLAGS} ${EIGEN_CUDA_CXX_FLAGS}") + cuda_include_directories("${CMAKE_CURRENT_BINARY_DIR}" "${CUDA_TOOLKIT_ROOT_DIR}/include") + endif() + set(EIGEN_ADD_TEST_FILENAME_EXTENSION "cu") - unset(EIGEN_ADD_TEST_FILENAME_EXTENSION) + ei_add_test(cuda_basic) -endif(CUDA_FOUND) + unset(EIGEN_ADD_TEST_FILENAME_EXTENSION) + + endif(CUDA_FOUND) endif(EIGEN_TEST_CUDA) diff --git a/unsupported/test/CMakeLists.txt b/unsupported/test/CMakeLists.txt index 9248f0feb..a896b42e7 100644 --- a/unsupported/test/CMakeLists.txt +++ b/unsupported/test/CMakeLists.txt @@ -36,8 +36,8 @@ if(ADOLC_FOUND) include_directories(${ADOLC_INCLUDES}) ei_add_property(EIGEN_TESTED_BACKENDS "Adolc, ") if(EIGEN_TEST_CXX11) - ei_add_test(forward_adolc "" ${ADOLC_LIBRARIES}) - else() + ei_add_test(forward_adolc "" ${ADOLC_LIBRARIES}) +else() message(STATUS "Adolc found, but tests require C++11 mode") endif() else(ADOLC_FOUND) @@ -80,35 +80,35 @@ endif() ei_add_test(sparse_extra "" "") if (NOT CMAKE_CROSSCOMPILING) - find_package(FFTW) - if(FFTW_FOUND) - ei_add_property(EIGEN_TESTED_BACKENDS "fftw, ") - include_directories( ${FFTW_INCLUDES} ) - if(FFTWL_LIB) - ei_add_test(FFTW "-DEIGEN_FFTW_DEFAULT -DEIGEN_HAS_FFTWL" "${FFTW_LIBRARIES}" ) - else() - ei_add_test(FFTW "-DEIGEN_FFTW_DEFAULT" "${FFTW_LIBRARIES}" ) - endif() +find_package(FFTW) +if(FFTW_FOUND) + ei_add_property(EIGEN_TESTED_BACKENDS "fftw, ") + include_directories( ${FFTW_INCLUDES} ) + if(FFTWL_LIB) + ei_add_test(FFTW "-DEIGEN_FFTW_DEFAULT -DEIGEN_HAS_FFTWL" "${FFTW_LIBRARIES}" ) else() - ei_add_property(EIGEN_MISSING_BACKENDS "fftw, ") + ei_add_test(FFTW "-DEIGEN_FFTW_DEFAULT" "${FFTW_LIBRARIES}" ) endif() +else() + ei_add_property(EIGEN_MISSING_BACKENDS "fftw, ") +endif() option(EIGEN_TEST_NO_OPENGL "Disable OpenGL support in unit tests" OFF) if(NOT EIGEN_TEST_NO_OPENGL) - find_package(OpenGL) - find_package(GLUT) - find_package(GLEW) - if(OPENGL_FOUND AND GLUT_FOUND AND GLEW_FOUND) - include_directories(${OPENGL_INCLUDE_DIR} ${GLUT_INCLUDE_DIR} ${GLEW_INCLUDE_DIRS}) - ei_add_property(EIGEN_TESTED_BACKENDS "OpenGL, ") - set(EIGEN_GL_LIB ${GLUT_LIBRARIES} ${GLEW_LIBRARIES} ${OPENGL_LIBRARIES}) - ei_add_test(openglsupport "" "${EIGEN_GL_LIB}" ) - else() - ei_add_property(EIGEN_MISSING_BACKENDS "OpenGL, ") - endif() + find_package(OpenGL) + find_package(GLUT) + find_package(GLEW) + if(OPENGL_FOUND AND GLUT_FOUND AND GLEW_FOUND) + include_directories(${OPENGL_INCLUDE_DIR} ${GLUT_INCLUDE_DIR} ${GLEW_INCLUDE_DIRS}) + ei_add_property(EIGEN_TESTED_BACKENDS "OpenGL, ") + set(EIGEN_GL_LIB ${GLUT_LIBRARIES} ${GLEW_LIBRARIES} ${OPENGL_LIBRARIES}) + ei_add_test(openglsupport "" "${EIGEN_GL_LIB}" ) else() - ei_add_property(EIGEN_MISSING_BACKENDS "OpenGL, ") + ei_add_property(EIGEN_MISSING_BACKENDS "OpenGL, ") endif() +else() + ei_add_property(EIGEN_MISSING_BACKENDS "OpenGL, ") +endif() endif() ei_add_test(polynomialsolver) @@ -203,7 +203,7 @@ if(EIGEN_TEST_CXX11) endif() # These tests needs nvcc -find_package(CUDA 7.0) +find_package(CUDA 9.0) if(CUDA_FOUND AND EIGEN_TEST_CUDA) # Make sure to compile without the -pedantic, -Wundef, -Wnon-virtual-dtor # and -fno-check-new flags since they trigger thousands of compilation warnings @@ -224,15 +224,12 @@ if(CUDA_FOUND AND EIGEN_TEST_CUDA) string(APPEND EIGEN_CUDA_CXX11_FLAGS " -std=c++11") endif(MSVC) endif() - - if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") - set(CUDA_NVCC_FLAGS "-ccbin ${CMAKE_C_COMPILER}" CACHE STRING "nvcc flags" FORCE) - endif() if(EIGEN_TEST_CUDA_CLANG) - string(APPEND CMAKE_CXX_FLAGS " --cuda-path=${CUDA_TOOLKIT_ROOT_DIR} ${EIGEN_CUDA_CXX11_FLAGS}") + string(APPEND CMAKE_CXX_FLAGS " --cuda-path=${CUDA_TOOLKIT_ROOT_DIR}") foreach(ARCH IN LISTS EIGEN_CUDA_COMPUTE_ARCH) string(APPEND CMAKE_CXX_FLAGS " --cuda-gpu-arch=sm_${ARCH}") endforeach() + string(APPEND CMAKE_CXX_FLAGS " ${EIGEN_CUDA_CXX_FLAGS}") else() set(CUDA_PROPAGATE_HOST_FLAGS OFF) set(NVCC_ARCH_FLAGS) @@ -249,15 +246,10 @@ if(CUDA_FOUND AND EIGEN_TEST_CUDA) foreach(ARCH IN LISTS EIGEN_CUDA_COMPUTE_ARCH) string(APPEND NVCC_ARCH_FLAGS " -gencode arch=compute_${ARCH},code=sm_${ARCH}") endforeach() - set(CUDA_NVCC_FLAGS "--expt-relaxed-constexpr -Xcudafe \"--display_error_number\" ${NVCC_ARCH_FLAGS} ${CUDA_NVCC_FLAGS} ${EIGEN_CUDA_CXX11_FLAGS}") + set(CUDA_NVCC_FLAGS "--expt-relaxed-constexpr -Xcudafe \"--display_error_number\" ${NVCC_ARCH_FLAGS} ${CUDA_NVCC_FLAGS} ${EIGEN_CUDA_CXX_FLAGS}") cuda_include_directories("${CMAKE_CURRENT_BINARY_DIR}" "${CUDA_TOOLKIT_ROOT_DIR}/include") endif() - - set(EIGEN_CUDA_RELAXED_CONSTEXPR "--expt-relaxed-constexpr") - if (${CUDA_VERSION} STREQUAL "7.0") - set(EIGEN_CUDA_RELAXED_CONSTEXPR "--relaxed-constexpr") - endif() - + set(EIGEN_ADD_TEST_FILENAME_EXTENSION "cu") ei_add_test(cxx11_tensor_complex_cuda)