1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143
|
set(VTK_SMP_IMPLEMENTATION_TYPE "Sequential"
CACHE STRING "Which multi-threaded parallelism implementation to use. Options are Sequential, STDThread, OpenMP or TBB")
set_property(CACHE VTK_SMP_IMPLEMENTATION_TYPE
PROPERTY
STRINGS Sequential OpenMP TBB STDThread)
if (NOT (VTK_SMP_IMPLEMENTATION_TYPE STREQUAL "OpenMP" OR
VTK_SMP_IMPLEMENTATION_TYPE STREQUAL "TBB" OR
VTK_SMP_IMPLEMENTATION_TYPE STREQUAL "Sequential"))
set_property(CACHE VTK_SMP_IMPLEMENTATION_TYPE
PROPERTY
VALUE "STDThread")
endif ()
option(VTK_SMP_ENABLE_SEQUENTIAL "Enable Sequential backend" ON)
option(VTK_SMP_ENABLE_STDTHREAD "Enable STDThread backend" ON)
# Force option to be ON if VTK_SMP_IMPLEMENTATION_TYPE equal to the backend otherwise it's OFF by default
cmake_dependent_option(VTK_SMP_ENABLE_TBB "Enable TBB backend" OFF
"NOT VTK_SMP_IMPLEMENTATION_TYPE STREQUAL TBB" ON)
cmake_dependent_option(VTK_SMP_ENABLE_OPENMP "Enable OpenMP backend" OFF
"NOT VTK_SMP_IMPLEMENTATION_TYPE STREQUAL OpenMP" ON)
mark_as_advanced(
VTK_SMP_ENABLE_SEQUENTIAL
VTK_SMP_ENABLE_STDTHREAD
VTK_SMP_ENABLE_TBB
VTK_SMP_ENABLE_OPENMP)
set(vtk_smp_default_name)
string(TOUPPER "${VTK_SMP_IMPLEMENTATION_TYPE}" vtk_smp_default_name)
if (NOT VTK_SMP_ENABLE_${vtk_smp_default_name})
message(FATAL_ERROR
"VTK_SMP_ENABLE_${vtk_smp_default_name} must be enabled as "
"VTK_SMP_IMPLEMENTATION_TYPE is set to ${VTK_SMP_IMPLEMENTATION_TYPE}.")
endif()
set(vtk_smp_defines)
set(vtk_smp_use_default_atomics ON)
set(vtk_smp_backends)
if (VTK_SMP_ENABLE_TBB)
vtk_module_find_package(PACKAGE TBB)
list(APPEND vtk_smp_libraries
TBB::tbb)
set(vtk_smp_enable_tbb 1)
list(APPEND vtk_smp_backends "TBB")
set(vtk_smp_use_default_atomics OFF)
set(vtk_smp_implementation_dir SMP/TBB)
list(APPEND vtk_smp_sources
"${vtk_smp_implementation_dir}/vtkSMPToolsImpl.cxx")
list(APPEND vtk_smp_nowrap_headers
"${vtk_smp_implementation_dir}/vtkSMPThreadLocalImpl.h")
list(APPEND vtk_smp_templates
"${vtk_smp_implementation_dir}/vtkSMPToolsImpl.txx")
endif()
if (VTK_SMP_ENABLE_OPENMP)
vtk_module_find_package(PACKAGE OpenMP)
list(APPEND vtk_smp_libraries
OpenMP::OpenMP_CXX)
set(vtk_smp_enable_openmp 1)
list(APPEND vtk_smp_backends "OpenMP")
set(vtk_smp_implementation_dir SMP/OpenMP)
list(APPEND vtk_smp_sources
"${vtk_smp_implementation_dir}/vtkSMPToolsImpl.cxx"
"${vtk_smp_implementation_dir}/vtkSMPThreadLocalBackend.cxx")
list(APPEND vtk_smp_nowrap_headers
"${vtk_smp_implementation_dir}/vtkSMPThreadLocalImpl.h"
"${vtk_smp_implementation_dir}/vtkSMPThreadLocalBackend.h")
list(APPEND vtk_smp_templates
"${vtk_smp_implementation_dir}/vtkSMPToolsImpl.txx")
if (OpenMP_CXX_SPEC_DATE AND NOT "${OpenMP_CXX_SPEC_DATE}" LESS "201107")
set(vtk_smp_use_default_atomics OFF)
else()
message(WARNING
"Required OpenMP version (3.1) for atomics not detected. Using default "
"atomics implementation.")
endif()
endif()
if (VTK_SMP_ENABLE_STDTHREAD)
set(vtk_smp_enable_stdthread 1)
set(vtk_smp_implementation_dir SMP/STDThread)
list(APPEND vtk_smp_backends "STDThread")
list(APPEND vtk_smp_sources
"${vtk_smp_implementation_dir}/vtkSMPToolsImpl.cxx"
"${vtk_smp_implementation_dir}/vtkSMPThreadLocalBackend.cxx"
"${vtk_smp_implementation_dir}/vtkSMPThreadPool.cxx")
list(APPEND vtk_smp_nowrap_headers
"${vtk_smp_implementation_dir}/vtkSMPThreadLocalImpl.h"
"${vtk_smp_implementation_dir}/vtkSMPThreadLocalBackend.h"
"${vtk_smp_implementation_dir}/vtkSMPThreadPool.h")
list(APPEND vtk_smp_templates
"${vtk_smp_implementation_dir}/vtkSMPToolsImpl.txx")
endif()
if (VTK_SMP_ENABLE_SEQUENTIAL)
set(vtk_smp_enable_sequential 1)
set(vtk_smp_implementation_dir SMP/Sequential)
list(APPEND vtk_smp_backends "Sequential")
list(APPEND vtk_smp_sources
"${vtk_smp_implementation_dir}/vtkSMPToolsImpl.cxx")
list(APPEND vtk_smp_nowrap_headers
"${vtk_smp_implementation_dir}/vtkSMPThreadLocalImpl.h")
list(APPEND vtk_smp_templates
"${vtk_smp_implementation_dir}/vtkSMPToolsImpl.txx")
endif()
set_property(GLOBAL
PROPERTY
_vtk_smp_backends "${vtk_smp_backends}")
if (vtk_smp_use_default_atomics)
include(CheckSymbolExists)
include("${CMAKE_CURRENT_SOURCE_DIR}/vtkTestBuiltins.cmake")
set(vtk_atomics_default_impl_dir "${CMAKE_CURRENT_SOURCE_DIR}/SMP/Sequential")
endif()
set(vtk_smp_common_dir SMP/Common)
list(APPEND vtk_smp_sources
"${vtk_smp_common_dir}/vtkSMPToolsAPI.cxx")
list(APPEND vtk_smp_nowrap_headers
"${vtk_smp_common_dir}/vtkSMPThreadLocalAPI.h"
"${vtk_smp_common_dir}/vtkSMPThreadLocalImplAbstract.h"
"${vtk_smp_common_dir}/vtkSMPToolsAPI.h"
"${vtk_smp_common_dir}/vtkSMPToolsImpl.h"
"${vtk_smp_common_dir}/vtkSMPToolsInternal.h")
list(APPEND vtk_smp_sources
vtkSMPTools.cxx)
list(APPEND vtk_smp_headers
vtkSMPTools.h
vtkSMPThreadLocal.h
vtkSMPThreadLocalObject.h)
|