mirror of
https://github.com/pytorch/pytorch.git
synced 2025-10-20 12:54:11 +08:00
Refactored CUDA detection a bit
Refactoring, minor fixes
This commit is contained in:
@ -31,38 +31,36 @@ include(ExternalProject)
|
||||
include(cmake/Utils.cmake)
|
||||
|
||||
# options
|
||||
option(USE_NERVANA_GPU
|
||||
"Use Nervana GPU backend" OFF)
|
||||
option(USE_LMDB
|
||||
"Use LMDB" ON)
|
||||
option(USE_LEVELDB
|
||||
"Use LMDB" ON)
|
||||
option(USE_OPENCV
|
||||
"Use openCV" ON)
|
||||
option(USE_ZMQ
|
||||
"Use ZMQ" OFF)
|
||||
option(USE_ROCKSDB
|
||||
"Use RocksDB" OFF)
|
||||
option(USE_MPI
|
||||
"Use MPI" OFF)
|
||||
option(USE_NERVANA_GPU "Use Nervana GPU backend" OFF)
|
||||
option(USE_LMDB "Use LMDB" ON)
|
||||
option(USE_LEVELDB "Use LMDB" ON)
|
||||
option(USE_OPENCV "Use openCV" ON)
|
||||
option(USE_ZMQ "Use ZMQ" OFF)
|
||||
option(USE_ROCKSDB "Use RocksDB" OFF)
|
||||
option(USE_MPI "Use MPI" OFF)
|
||||
option(BUILD_SHARED_LIBS "Build libcaffe2.so" ON)
|
||||
|
||||
# ---[ Dependencies
|
||||
include(cmake/Dependencies.cmake)
|
||||
|
||||
# Third party builds.
|
||||
# ---[ Set link flag
|
||||
if(BUILD_SHARED_LIBS)
|
||||
set(Caffe2_LINK Caffe2_CPU Caffe2_GPU Caffe_PROTO Caffe2_PROTO)
|
||||
else()
|
||||
set(Caffe2_LINK -Wl,--whole-archive Caffe2_CPU Caffe2_GPU Caffe_PROTO Caffe2_PROTO -Wl,--no-whole-archive)
|
||||
endif()
|
||||
|
||||
# ---[ Third party builds.
|
||||
include_directories(${CMAKE_SOURCE_DIR})
|
||||
|
||||
# Old caffe protobuf.
|
||||
# ---[ Old caffe protobuf.
|
||||
add_subdirectory(caffe/proto)
|
||||
|
||||
# ---[ Main build
|
||||
add_subdirectory(caffe2)
|
||||
target_link_libraries(Caffe2_CPU)
|
||||
target_compile_features(Caffe2_CPU PRIVATE cxx_range_for)
|
||||
|
||||
# ---[ Copy all python files to build directory
|
||||
# ---[ Assemble list of python files to copy
|
||||
# Copy the files
|
||||
# file(COPY ${Caffe2_PYTHON_SRC} DESTINATION ${CMAKE_BINARY_DIR})
|
||||
install(DIRECTORY ${CMAKE_SOURCE_DIR} DESTINATION ${CMAKE_INSTALL_PREFIX}
|
||||
FILES_MATCHING PATTERN "*.py")
|
||||
|
||||
|
@ -2,8 +2,7 @@
|
||||
|
||||
file(GLOB Caffe_PROTOBUF_FILES "${CMAKE_CURRENT_SOURCE_DIR}/*.proto")
|
||||
|
||||
# PROTOBUF_GENERATE_CPP(Caffe_PROTO_SRCS Caffe_PROTO_HEADERS ${Caffe_PROTOBUF_FILES})
|
||||
caffe_protobuf_generate_cpp_py(${CMAKE_CURRENT_SOURCE_DIR} Caffe_PROTO_SRCS Caffe_PROTO_HEADERS Caffe_PROTO_PY ${Caffe_PROTOBUF_FILES})
|
||||
caffe_protobuf_generate_cpp_py(${CMAKE_CURRENT_BINARY_DIR} Caffe_PROTO_SRCS Caffe_PROTO_HEADERS Caffe_PROTO_PY ${Caffe_PROTOBUF_FILES})
|
||||
|
||||
add_library(Caffe_PROTO SHARED ${Caffe_PROTO_HEADERS} ${Caffe_PROTO_SRCS})
|
||||
target_include_directories(Caffe_PROTO PUBLIC ${CMAKE_CURRENT_BINARY_DIR})
|
||||
|
@ -111,13 +111,13 @@ list(APPEND Caffe2_LINK_LIBS Caffe2_PROTO)
|
||||
# Compile exposed libraries.
|
||||
LIST(APPEND CMAKE_CXX_FLAGS "-std=c++11 -fPIC")
|
||||
add_library(Caffe2_CPU ${Caffe2_CPU_SRCS})
|
||||
target_link_libraries(Caffe2_CPU ${Caffe2_LINK_LIBS})
|
||||
target_link_libraries(Caffe2_CPU ${Caffe2_LINK_LIBS} glog gflags ${Caffe2_LINKER_LIBS})
|
||||
list(APPEND Caffe2_LINK_LIBS Caffe2_CPU)
|
||||
|
||||
# ---[ CUDA library
|
||||
if(HAVE_CUDA)
|
||||
CUDA_ADD_LIBRARY(Caffe2_GPU ${Caffe2_GPU_SRCS})
|
||||
target_link_libraries(Caffe2_GPU ${Caffe2_LINK_LIBS} glog gflags atlas cblas)
|
||||
target_link_libraries(Caffe2_GPU ${Caffe2_LINK_LIBS} glog gflags ${Caffe2_LINKER_LIBS})
|
||||
list(APPEND Caffe2_LINK_LIBS Caffe2_GPU)
|
||||
endif()
|
||||
|
||||
@ -125,7 +125,7 @@ endif()
|
||||
foreach(test_src ${Caffe2_CPU_TEST_SRCS})
|
||||
get_filename_component(test_name ${test_src} NAME_WE)
|
||||
add_executable(${test_name} "${test_src}")
|
||||
target_link_libraries(${test_name} ${Caffe2_LINK_LIBS} glog atlas cblas gtest gtest_main ${Caffe2_LINKER_LIBS})
|
||||
target_link_libraries(${test_name} ${Caffe2_LINK} gtest_main)
|
||||
target_compile_features(${test_name} PRIVATE cxx_range_for)
|
||||
endforeach()
|
||||
|
||||
@ -160,7 +160,7 @@ endif()
|
||||
foreach(binary_src ${Caffe2_BINARY_SRCS})
|
||||
get_filename_component(bin_name ${binary_src} NAME_WE)
|
||||
add_executable(${bin_name} ${binary_src})
|
||||
target_link_libraries(${bin_name} -Wl,--whole-archive ${Caffe2_LINK_LIBS} glog atlas cblas cnmem ${Caffe2_LINKER_LIBS} -Wl,--no-whole-archive)
|
||||
target_link_libraries(${bin_name} ${Caffe2_LINK} glog cnmem ${Caffe2_LINKER_LIBS})
|
||||
endforeach()
|
||||
|
||||
|
||||
|
@ -2,8 +2,7 @@
|
||||
|
||||
file(GLOB Caffe2_PROTOBUF_FILES "${CMAKE_CURRENT_SOURCE_DIR}/*.proto")
|
||||
|
||||
# PROTOBUF_GENERATE_CPP(Caffe2_PROTO_SRCS Caffe2_PROTO_HEADERS ${Caffe2_PROTOBUF_FILES})
|
||||
caffe_protobuf_generate_cpp_py(${CMAKE_CURRENT_SOURCE_DIR} Caffe2_PROTO_SRCS Caffe2_PROTO_HEADERS Caffe2_PROTO_PY ${Caffe2_PROTOBUF_FILES})
|
||||
caffe_protobuf_generate_cpp_py(${CMAKE_CURRENT_BINARY_DIR} Caffe2_PROTO_SRCS Caffe2_PROTO_HEADERS Caffe2_PROTO_PY ${Caffe2_PROTOBUF_FILES})
|
||||
|
||||
add_library(Caffe2_PROTO SHARED ${Caffe2_PROTO_HEADERS} ${Caffe2_PROTO_SRCS})
|
||||
target_include_directories(Caffe2_PROTO PUBLIC ${CMAKE_CURRENT_BINARY_DIR})
|
||||
|
@ -1,6 +1,6 @@
|
||||
# Known NVIDIA GPU achitectures Caffe2 can be compiled for.
|
||||
# This list will be used for CUDA_ARCH_NAME = All option
|
||||
set(Caffe2_known_gpu_archs "20 21(20) 30 35 50")
|
||||
set(Caffe2_known_gpu_archs "20 21(20) 30 35 50 52 60 61")
|
||||
|
||||
################################################################################################
|
||||
# A function for automatic detection of GPUs installed (if autodetection is enabled)
|
||||
@ -52,7 +52,7 @@ endfunction()
|
||||
# caffe_select_nvcc_arch_flags(out_variable)
|
||||
function(caffe2_select_nvcc_arch_flags out_variable)
|
||||
# List of arch names
|
||||
set(__archs_names "Fermi" "Kepler" "Maxwell" "All" "Manual")
|
||||
set(__archs_names "Kepler" "Maxwell" "Pascal" "All" "Manual")
|
||||
set(__archs_name_default "All")
|
||||
if(NOT CMAKE_CROSSCOMPILING)
|
||||
list(APPEND __archs_names "Auto")
|
||||
@ -79,9 +79,7 @@ function(caffe2_select_nvcc_arch_flags out_variable)
|
||||
unset(CUDA_ARCH_PTX CACHE)
|
||||
endif()
|
||||
|
||||
if(${CUDA_ARCH_NAME} STREQUAL "Fermi")
|
||||
set(__cuda_arch_bin "20 21(20)")
|
||||
elseif(${CUDA_ARCH_NAME} STREQUAL "Kepler")
|
||||
if(${CUDA_ARCH_NAME} STREQUAL "Kepler")
|
||||
set(__cuda_arch_bin "30 35")
|
||||
elseif(${CUDA_ARCH_NAME} STREQUAL "Maxwell")
|
||||
set(__cuda_arch_bin "50")
|
||||
@ -201,10 +199,11 @@ foreach(diag cc_clobber_ignored integer_sign_change useless_using_declaration se
|
||||
list(APPEND CUDA_NVCC_FLAGS -Xcudafe --diag_suppress=${diag})
|
||||
endforeach()
|
||||
|
||||
# setting default testing device
|
||||
if(NOT CUDA_TEST_DEVICE)
|
||||
set(CUDA_TEST_DEVICE -1)
|
||||
endif()
|
||||
# Set C++11 support
|
||||
list(APPEND CUDA_NVCC_FLAGS "-Xcompiler -fPIC")
|
||||
|
||||
# Set :expt-relaxed-constexpr to suppress Eigen warnings
|
||||
list(APPEND CUDA_NVCC_FLAGS "--expt-relaxed-constexpr")
|
||||
|
||||
mark_as_advanced(CUDA_BUILD_CUBIN CUDA_BUILD_EMULATION CUDA_VERBOSE_BUILD)
|
||||
mark_as_advanced(CUDA_SDK_ROOT_DIR CUDA_SEPARABLE_COMPILATION)
|
||||
|
@ -11,6 +11,7 @@ list(APPEND Caffe2_LINKER_LIBS ${CMAKE_THREAD_LIBS_INIT})
|
||||
# ---[ BLAS
|
||||
set(BLAS "Atlas" CACHE STRING "Selected BLAS library")
|
||||
set_property(CACHE BLAS PROPERTY STRINGS "Atlas;OpenBLAS;MKL")
|
||||
list(APPEND Caffe2_LINKER_LIBS cblas)
|
||||
|
||||
if(BLAS STREQUAL "Atlas")
|
||||
find_package(Atlas REQUIRED)
|
||||
@ -109,10 +110,6 @@ endif()
|
||||
|
||||
# ---[ CUDA
|
||||
include(cmake/Cuda.cmake)
|
||||
if(HAVE_CUDA)
|
||||
LIST(APPEND CUDA_NVCC_FLAGS -Xcompiler -std=c++11)
|
||||
LIST(APPEND CUDA_NVCC_FLAGS -gencode arch=compute_52,code=sm_52)
|
||||
endif()
|
||||
|
||||
# ---[ CUDNN
|
||||
if(HAVE_CUDA)
|
||||
@ -127,6 +124,7 @@ endif()
|
||||
if(HAVE_CUDA)
|
||||
include("cmake/External/nccl.cmake")
|
||||
include_directories(SYSTEM ${NCCL_INCLUDE_DIRS})
|
||||
message(STATUS "NCCL: ${NCCL_LIBRARIES}")
|
||||
list(APPEND Caffe2_LINKER_LIBS ${NCCL_LIBRARIES})
|
||||
endif()
|
||||
|
||||
@ -139,5 +137,7 @@ endif()
|
||||
if(HAVE_CUDA)
|
||||
add_subdirectory(${CMAKE_SOURCE_DIR}/third_party/cnmem)
|
||||
include_directories(SYSTEM ${CMAKE_SOURCE_DIR}/third_party/cnmem/include)
|
||||
list(APPEND ${Caffe2_LINKER_LIBS} ${CMAKE_SOURCE_DIR}/third_party/cnmem/libcnmem.so)
|
||||
# message(STATUS "cnmem: ${CMAKE_SOURCE_DIR}/third_party/cnmem/libcnmem.so")
|
||||
# message(STATUS "${CMAKE_CURRENT_BINARY_DIR}")
|
||||
list(APPEND Caffe2_LINKER_LIBS "${CMAKE_CURRENT_BINARY_DIR}/third_party/cnmem/libcnmem.so")
|
||||
endif()
|
||||
|
4
third_party/CMakeLists.txt
vendored
4
third_party/CMakeLists.txt
vendored
@ -11,11 +11,11 @@ add_subdirectory("${CMAKE_CURRENT_SOURCE_DIR}/googletest")
|
||||
if (USE_EXTERNAL_NCCL)
|
||||
externalproject_add(project_nccl
|
||||
SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/nccl
|
||||
PREFIX ${CMAKE_CURRENT_BINARY_DIR}/nccl
|
||||
BUILD_COMMAND make
|
||||
CONFIGURE_COMMAND ""
|
||||
BUILD_IN_SOURCE 1
|
||||
INSTALL_COMMAND ""
|
||||
BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/nccl
|
||||
INSTALL_DIR ${CMAKE_CURRNET_BINARY_DIR}/nccl
|
||||
)
|
||||
externalproject_get_property(project_nccl install_dir)
|
||||
add_library(nccl SHARED IMPORTED)
|
||||
|
Reference in New Issue
Block a user