1
- cmake_minimum_required (VERSION 2.8.12 FATAL_ERROR)
1
+ cmake_minimum_required (VERSION 3.13 FATAL_ERROR)
2
2
if (POLICY CMP0074)
3
3
# 1. Introduced with 3.12.4.
4
4
# 2. *_ROOT variables will be checked
5
5
cmake_policy (SET CMP0074 NEW)
6
6
endif ()
7
7
8
- if (${CMAKE_VERSION} VERSION_GREATER "3.4.0" )
9
- find_program (CCACHE_PROGRAM ccache)
10
- if (CCACHE_PROGRAM)
8
+ find_program (CCACHE_PROGRAM ccache)
9
+ if (CCACHE_PROGRAM)
11
10
set (CMAKE_C_COMPILER_LAUNCHER "${CCACHE_PROGRAM} " )
12
11
set (CMAKE_CXX_COMPILER_LAUNCHER "${CCACHE_PROGRAM} " )
13
12
set (CMAKE_CUDA_COMPILER_LAUNCHER "${CCACHE_PROGRAM} " )
14
- else ()
13
+ else ()
15
14
message (STATUS "Could not find CCache. Consider installing CCache to speed up compilation." )
16
- endif ()
17
15
endif ()
18
16
19
17
project (horovod CXX)
@@ -23,7 +21,10 @@ set(CMAKE_CXX_STANDARD_REQUIRED ON)
23
21
set (CMAKE_CXX_EXTENSIONS OFF )
24
22
25
23
# Configure path to modules (for find_package)
26
- set (CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${PROJECT_SOURCE_DIR} /cmake/Modules/" )
24
+ set (CMAKE_MODULE_PATH
25
+ ${CMAKE_MODULE_PATH}
26
+ "${PROJECT_SOURCE_DIR} /cmake/Modules/"
27
+ "${PROJECT_SOURCE_DIR} /cmake/upstream/" )
27
28
include (cmake/Utilities.cmake)
28
29
29
30
create_metadata()
@@ -148,14 +149,33 @@ if (NOT "$ENV{HOROVOD_WITHOUT_MPI}" STREQUAL "1")
148
149
endif ()
149
150
150
151
# CUDA and ROCM
152
+ set (CMAKE_CUDA_HOST_COMPILER ${CMAKE_CXX_COMPILER} )
153
+ if (NOT DEFINED CMAKE_CUDA_RUNTIME_LIBRARY)
154
+ set (CMAKE_CUDA_RUNTIME_LIBRARY "Shared" ) # Set to "Static" or "Shared"
155
+ endif ()
156
+ if (DEFINED ENV{HOROVOD_CUDA_HOME})
157
+ set (CMAKE_CUDA_COMPILER $ENV{HOROVOD_CUDA_HOME} /bin/nvcc)
158
+ endif ()
159
+ include (CheckLanguage)
160
+ check_language(CUDA)
161
+ if (CMAKE_CUDA_COMPILER)
162
+ if ((CMAKE_CXX_COMPILER_ID MATCHES GNU) AND (CMAKE_SYSTEM_PROCESSOR MATCHES ppc64le))
163
+ if (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 8.0)
164
+ set (CMAKE_CUDA_FLAGS "${CMAKE_CUDA_FLAGS} -std=c++11" )
165
+ endif ()
166
+ endif ()
167
+ enable_language (CUDA)
168
+ endif ()
169
+
151
170
macro (ADD_CUDA)
152
- if (DEFINED ENV{HOROVOD_CUDA_HOME})
153
- set (CUDA_TOOLKIT_ROOT_DIR $ENV{HOROVOD_CUDA_HOME} )
171
+ find_package (CUDAToolkit REQUIRED)
172
+ include_directories (SYSTEM ${CMAKE_CUDA_TOOLKIT_INCLUDE_DIRECTORIES} )
173
+ string (TOLOWER "${CMAKE_CUDA_RUNTIME_LIBRARY} " lowercase_CMAKE_CUDA_RUNTIME_LIBRARY)
174
+ if (lowercase_CMAKE_CUDA_RUNTIME_LIBRARY STREQUAL "static" )
175
+ list (APPEND LINKER_LIBS CUDA::cudart_static)
176
+ elseif (lowercase_CMAKE_CUDA_RUNTIME_LIBRARY STREQUAL "shared" )
177
+ list (APPEND LINKER_LIBS CUDA::cudart)
154
178
endif ()
155
- option (CUDA_USE_STATIC_CUDA_RUNTIME "Use the static version of the CUDA runtime library if available" OFF )
156
- find_package (CUDA REQUIRED)
157
- include_directories (SYSTEM ${CUDA_INCLUDE_DIRS} )
158
- list (APPEND LINKER_LIBS ${CUDA_LIBRARIES} )
159
179
list (APPEND SOURCES "${PROJECT_SOURCE_DIR} /horovod/common/ops/cuda_operations.cc"
160
180
"${PROJECT_SOURCE_DIR} /horovod/common/ops/gpu_operations.cc" )
161
181
# CUDA + MPI
@@ -209,7 +229,7 @@ endif()
209
229
if (HOROVOD_GPU_ALLREDUCE STREQUAL "D" )
210
230
message (DEPRECATION "DDL backend has been deprecated. Please, start using the NCCL backend by building Horovod with "
211
231
"'HOROVOD_GPU_OPERATIONS=NCCL'. Will be removed in v0.21.0." )
212
- list (APPEND LINKER_LIBS "${CUDA_TOOLKIT_ROOT_DIR } /lib/libddl.so" "${CUDA_TOOLKIT_ROOT_DIR } /lib/libddl_pack.so" )
232
+ list (APPEND LINKER_LIBS "${CUDAToolkit_LIBRARY_ROOT } /lib/libddl.so" "${CUDAToolkit_LIBRARY_ROOT } /lib/libddl_pack.so" )
213
233
list (APPEND SOURCES "${PROJECT_SOURCE_DIR} /horovod/common/mpi/ddl_mpi_context_manager.cc"
214
234
"${PROJECT_SOURCE_DIR} /horovod/common/ops/ddl_operations.cc" )
215
235
add_definitions (-DHAVE_DDL=1)
0 commit comments