53 lines
2.7 KiB
CMake
53 lines
2.7 KiB
CMake
include_directories(${PROJECT_SOURCE_DIR})
|
|
include_directories(${PROJECT_BINARY_DIR})
|
|
|
|
enable_language(CXX)
|
|
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_C_FLAGS} -DADD${BU} -DCBLAS")
|
|
|
|
set(CPP_THREAD_SAFETY_LIBS ${OpenBLAS_LIBNAME})
|
|
find_package(Threads REQUIRED)
|
|
list(APPEND CPP_THREAD_SAFETY_LIBS Threads::Threads)
|
|
add_definitions(-DOPENBLAS_USE_GENERATED_CBLAS_H)
|
|
|
|
if ((CPP_THREAD_SAFETY_TEST OR CPP_THREAD_SAFETY_GEMV) AND CPP_THREAD_SAFETY_USE_OPENMP)
|
|
find_package(OpenMP REQUIRED COMPONENTS CXX)
|
|
list(APPEND CPP_THREAD_SAFETY_LIBS OpenMP::OpenMP_CXX)
|
|
add_definitions(-DCPP_THREAD_SAFETY_USE_OPENMP)
|
|
endif()
|
|
|
|
set(CPP_THREAD_SAFETY_DGEMM_ARGS "" CACHE STRING "Arguments passed to the DGEMM thread safety test")
|
|
set(CPP_THREAD_SAFETY_DGEMM_MIXED_ARGS "" CACHE STRING "Arguments passed to the mixed DGEMM thread safety test")
|
|
set(CPP_THREAD_SAFETY_DGEMV_ARGS "" CACHE STRING "Arguments passed to the DGEMV thread safety test")
|
|
set(CPP_THREAD_SAFETY_SHUTDOWN_ARGS "" CACHE STRING "Arguments passed to the DGEMM shutdown safety test")
|
|
|
|
if (CPP_THREAD_SAFETY_TEST)
|
|
message(STATUS "building thread safety test")
|
|
add_executable(dgemm_thread_safety dgemm_thread_safety.cpp)
|
|
target_link_libraries(dgemm_thread_safety ${CPP_THREAD_SAFETY_LIBS})
|
|
add_test(NAME dgemm_thread_safety COMMAND ${CMAKE_CURRENT_BINARY_DIR}/dgemm_thread_safety ${CPP_THREAD_SAFETY_DGEMM_ARGS})
|
|
|
|
add_executable(dgemm_thread_safety_mixed dgemm_thread_safety_mixed.cpp)
|
|
target_link_libraries(dgemm_thread_safety_mixed ${CPP_THREAD_SAFETY_LIBS})
|
|
add_test(NAME dgemm_thread_safety_mixed COMMAND ${CMAKE_CURRENT_BINARY_DIR}/dgemm_thread_safety_mixed ${CPP_THREAD_SAFETY_DGEMM_MIXED_ARGS})
|
|
|
|
# The shutdown race is Windows-specific: on POSIX, exit() runs the library
|
|
# destructor while worker threads are still computing into OpenBLAS-owned
|
|
# buffers, which no amount of locking inside blas_shutdown can make safe.
|
|
if (WIN32)
|
|
add_executable(dgemm_thread_safety_shutdown dgemm_thread_safety_shutdown.cpp)
|
|
target_link_libraries(dgemm_thread_safety_shutdown ${CPP_THREAD_SAFETY_LIBS})
|
|
add_test(NAME dgemm_thread_safety_shutdown COMMAND ${CMAKE_CURRENT_BINARY_DIR}/dgemm_thread_safety_shutdown ${CPP_THREAD_SAFETY_SHUTDOWN_ARGS})
|
|
# Bounded by the test itself: 40 children, each killed after 10s at worst.
|
|
# A passing run takes a few seconds; only a failing one approaches this.
|
|
set_tests_properties(dgemm_thread_safety_shutdown PROPERTIES TIMEOUT 600)
|
|
endif()
|
|
endif()
|
|
|
|
|
|
if (CPP_THREAD_SAFETY_TEST OR CPP_THREAD_SAFETY_GEMV)
|
|
add_executable(dgemv_thread_safety dgemv_thread_safety.cpp)
|
|
target_link_libraries(dgemv_thread_safety ${CPP_THREAD_SAFETY_LIBS})
|
|
add_test(NAME dgemv_thread_safety COMMAND ${CMAKE_CURRENT_BINARY_DIR}/dgemv_thread_safety ${CPP_THREAD_SAFETY_DGEMV_ARGS})
|
|
endif()
|