From 71ee882157ea06b0e8facb510c44b5a3a55e5d91 Mon Sep 17 00:00:00 2001 From: Edward Yang Date: Mon, 17 Dec 2018 19:50:10 -0800 Subject: [PATCH] Reenable OpenMP by reverting the following two commits. (#15315) Summary: Revert "Put back linker flag for OpenMP to prevent build break on ppc64le (#14569)" This reverts commit a84e873bb156080ea76ab182171b1f3b4d5395f6. Revert "Update OpenMP cmake setting for xcode 9 compiler(AppleClang 9.0) (#14473)" This reverts commit 8901935ad42fe9bf093d1106ea43606008a4024d. Pull Request resolved: https://github.com/pytorch/pytorch/pull/15315 Differential Revision: D13495852 Pulled By: ezyang fbshipit-source-id: bcd3f60088b14831c53d3c171f10cd1ab6b35dee --- .circleci/config.yml | 2 +- .jenkins/pytorch/build-asan.sh | 12 +----- caffe2/CMakeLists.txt | 10 +---- cmake/Dependencies.cmake | 65 +++++++++++++++++++------------- modules/detectron/CMakeLists.txt | 13 +------ torch/CMakeLists.txt | 12 +----- 6 files changed, 45 insertions(+), 69 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index ec65da4f2a2f..ecc56b7f9846 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -117,7 +117,7 @@ pytorch_linux_test_defaults: &pytorch_linux_test_defaults <<: *setup_ci_environment - run: name: Test - no_output_timeout: "90m" + no_output_timeout: "1h" command: | set -e export COMMIT_DOCKER_IMAGE=${DOCKER_IMAGE}-${CIRCLE_SHA1} diff --git a/.jenkins/pytorch/build-asan.sh b/.jenkins/pytorch/build-asan.sh index 7c7129fbcc74..9a2c631fd69b 100755 --- a/.jenkins/pytorch/build-asan.sh +++ b/.jenkins/pytorch/build-asan.sh @@ -14,18 +14,8 @@ clang --version # symbolize=1: Gives us much better errors when things go wrong export ASAN_OPTIONS=detect_leaks=0:symbolize=1 -# FIXME: Remove the hardcoded "-pthread" option. -# With asan build, the cmake thread CMAKE_HAVE_LIBC_CREATE[1] checking will -# succeed because "pthread_create" is in libasan.so. However, libasan doesn't -# have the full pthread implementation. Other advanced pthread functions doesn't -# exist in libasan.so[2]. If we need some pthread advanced functions, we still -# need to link the pthread library. -# [1] https://github.com/Kitware/CMake/blob/8cabaaf054a16ea9c8332ce8e9291bd026b38c62/Modules/FindThreads.cmake#L135 -# [2] https://wiki.gentoo.org/wiki/AddressSanitizer/Problems -# # TODO: Make the ASAN flags a more unified env var CC="clang" CXX="clang++" LDSHARED="clang --shared" \ - CFLAGS="-fsanitize=address -fsanitize=undefined -fno-sanitize-recover=all -shared-libasan -pthread" \ - CXX_FLAGS="-pthread" \ + CFLAGS="-fsanitize=address -fsanitize=undefined -fno-sanitize-recover=all -shared-libasan" \ NO_CUDA=1 USE_MKLDNN=0 \ python setup.py install diff --git a/caffe2/CMakeLists.txt b/caffe2/CMakeLists.txt index 6838be9c4c22..cec46d8fdb34 100644 --- a/caffe2/CMakeLists.txt +++ b/caffe2/CMakeLists.txt @@ -222,16 +222,8 @@ if(NOT BUILD_ATEN_ONLY) else() target_link_libraries(caffe2 PUBLIC protobuf::libprotobuf) endif() - - #cmake only check for separate OpenMP library on AppleClang 7+ - #https://github.com/Kitware/CMake/blob/42212f7539040139ecec092547b7d58ef12a4d72/Modules/FindOpenMP.cmake#L252 - if (WITH_OPENMP AND CMAKE_CXX_COMPILER_ID MATCHES "AppleClang") - if (CMAKE_CXX_COMPILER_VERSION VERSION_EQUAL "7.0" OR - CMAKE_CXX_COMPILER_VERSION VERSION_GREATER "7.0") - target_link_libraries(caffe2 PRIVATE ${OpenMP_libomp_LIBRARY}) - endif() - endif() endif() + target_link_libraries(caffe2 PUBLIC c10) target_link_libraries(caffe2 PUBLIC ${Caffe2_PUBLIC_DEPENDENCY_LIBS}) target_link_libraries(caffe2 PRIVATE ${Caffe2_DEPENDENCY_LIBS}) diff --git a/cmake/Dependencies.cmake b/cmake/Dependencies.cmake index 28ffacda0e1f..222ee4ba8a27 100644 --- a/cmake/Dependencies.cmake +++ b/cmake/Dependencies.cmake @@ -632,37 +632,12 @@ endif() # ---[ OpenMP if(USE_OPENMP) - set(WITH_OPENMP ON CACHE BOOL "OpenMP support if available?") - if(APPLE AND CMAKE_COMPILER_IS_GNUCC) - exec_program(uname ARGS -v OUTPUT_VARIABLE DARWIN_VERSION) - string(REGEX MATCH "[0-9]+" DARWIN_VERSION ${DARWIN_VERSION}) - message(STATUS "MAC OS Darwin Version: ${DARWIN_VERSION}") - if(DARWIN_VERSION GREATER 9) - set(APPLE_OPENMP_SUCKS 1) - endif(DARWIN_VERSION GREATER 9) - execute_process(COMMAND ${CMAKE_C_COMPILER} -dumpversion - OUTPUT_VARIABLE GCC_VERSION) - if(APPLE_OPENMP_SUCKS AND GCC_VERSION VERSION_LESS 4.6.2) - message(STATUS "Warning: Disabling OpenMP (unstable with this version of GCC)") - message(STATUS " Install GCC >= 4.6.2 or change your OS to enable OpenMP") - add_compile_options(-Wno-unknown-pragmas) - set(WITH_OPENMP OFF CACHE BOOL "OpenMP support if available?" FORCE) - endif() - endif() - - if(WITH_OPENMP AND NOT CHECKED_OPENMP) - find_package(OpenMP) - set(CHECKED_OPENMP ON CACHE BOOL "already checked for OpenMP") - - # OPENMP_FOUND is not cached in FindOpenMP.cmake (all other variables are cached) - # see https://github.com/Kitware/CMake/blob/master/Modules/FindOpenMP.cmake - set(OPENMP_FOUND ${OPENMP_FOUND} CACHE BOOL "OpenMP Support found") - endif() - + find_package(OpenMP) if(OPENMP_FOUND) message(STATUS "Adding " ${OpenMP_CXX_FLAGS}) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}") + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${OpenMP_EXE_LINKER_FLAGS}") else() message(WARNING "Not compiling with OpenMP. Suppress this warning with -DUSE_OPENMP=OFF") caffe2_update_option(USE_OPENMP OFF) @@ -1106,6 +1081,42 @@ if (NOT BUILD_ATEN_MOBILE) STRING(REPLACE "-DNDEBUG" "" CMAKE_CXX_FLAGS_DEBUG "" ${CMAKE_CXX_FLAGS_DEBUG}) STRING(REPLACE "-DNDEBUG" "" CMAKE_CXX_FLAGS_RELEASE "" ${CMAKE_CXX_FLAGS_RELEASE}) ENDIF() + + # OpenMP support? + SET(WITH_OPENMP ON CACHE BOOL "OpenMP support if available?") + IF (APPLE AND CMAKE_COMPILER_IS_GNUCC) + EXEC_PROGRAM (uname ARGS -v OUTPUT_VARIABLE DARWIN_VERSION) + STRING (REGEX MATCH "[0-9]+" DARWIN_VERSION ${DARWIN_VERSION}) + MESSAGE (STATUS "MAC OS Darwin Version: ${DARWIN_VERSION}") + IF (DARWIN_VERSION GREATER 9) + SET(APPLE_OPENMP_SUCKS 1) + ENDIF (DARWIN_VERSION GREATER 9) + EXECUTE_PROCESS (COMMAND ${CMAKE_C_COMPILER} -dumpversion + OUTPUT_VARIABLE GCC_VERSION) + IF (APPLE_OPENMP_SUCKS AND GCC_VERSION VERSION_LESS 4.6.2) + MESSAGE(STATUS "Warning: Disabling OpenMP (unstable with this version of GCC)") + MESSAGE(STATUS " Install GCC >= 4.6.2 or change your OS to enable OpenMP") + add_compile_options(-Wno-unknown-pragmas) + SET(WITH_OPENMP OFF CACHE BOOL "OpenMP support if available?" FORCE) + ENDIF() + ENDIF() + + IF (WITH_OPENMP AND NOT CHECKED_OPENMP) + FIND_PACKAGE(OpenMP) + SET(CHECKED_OPENMP ON CACHE BOOL "already checked for OpenMP") + + # OPENMP_FOUND is not cached in FindOpenMP.cmake (all other variables are cached) + # see https://github.com/Kitware/CMake/blob/master/Modules/FindOpenMP.cmake + SET(OPENMP_FOUND ${OPENMP_FOUND} CACHE BOOL "OpenMP Support found") + ENDIF() + + IF (OPENMP_FOUND) + MESSAGE(STATUS "Compiling with OpenMP support") + SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}") + SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}") + ENDIF() + + SET(CUDA_ATTACH_VS_BUILD_RULE_TO_CUDA_FILE OFF) FIND_PACKAGE(MAGMA) diff --git a/modules/detectron/CMakeLists.txt b/modules/detectron/CMakeLists.txt index 6905b4cbf702..971baa41adeb 100644 --- a/modules/detectron/CMakeLists.txt +++ b/modules/detectron/CMakeLists.txt @@ -2,15 +2,6 @@ file(GLOB Detectron_CPU_SRCS ${CMAKE_CURRENT_SOURCE_DIR}/*.cc) file(GLOB Detectron_GPU_SRCS ${CMAKE_CURRENT_SOURCE_DIR}/*.cu) if (BUILD_CAFFE2_OPS) - #cmake only check for separate OpenMP library on AppleClang 7+ - #https://github.com/Kitware/CMake/blob/42212f7539040139ecec092547b7d58ef12a4d72/Modules/FindOpenMP.cmake#L252 - if (WITH_OPENMP AND CMAKE_CXX_COMPILER_ID MATCHES "AppleClang") - if (CMAKE_CXX_COMPILER_VERSION VERSION_EQUAL "7.0" OR - CMAKE_CXX_COMPILER_VERSION VERSION_GREATER "7.0") - Set(OpenMP_link ${OpenMP_libomp_LIBRARY}) - endif() - endif() - # Note(ilijar): Since Detectron ops currently have no # CPU implementation, we only build GPU ops for now. if (USE_CUDA) @@ -19,11 +10,11 @@ if (BUILD_CAFFE2_OPS) ${Detectron_CPU_SRCS} ${Detectron_GPU_SRCS}) - target_link_libraries(caffe2_detectron_ops_gpu caffe2_gpu ${OpenMP_link}) + target_link_libraries(caffe2_detectron_ops_gpu caffe2_gpu) install(TARGETS caffe2_detectron_ops_gpu DESTINATION lib) elseif(NOT IOS_PLATFORM) add_library(caffe2_detectron_ops SHARED ${Detectron_CPU_SRCS}) - target_link_libraries(caffe2_detectron_ops caffe2 ${OpenMP_link}) + target_link_libraries(caffe2_detectron_ops caffe2) install(TARGETS caffe2_detectron_ops DESTINATION lib) endif() endif() diff --git a/torch/CMakeLists.txt b/torch/CMakeLists.txt index 9b2a9e1bcfbe..d8ad5c0e364a 100644 --- a/torch/CMakeLists.txt +++ b/torch/CMakeLists.txt @@ -3,7 +3,7 @@ if (CAFFE2_CMAKE_BUILDING_WITH_MAIN_REPO) return() endif() else() - cmake_minimum_required(VERSION 3.5 FATAL_ERROR) + cmake_minimum_required(VERSION 3.0 FATAL_ERROR) project(torch CXX C) find_package(Caffe2 REQUIRED) option(USE_CUDA "Use CUDA" ON) @@ -331,16 +331,8 @@ if(OPENMP_FOUND) if (VERBOSE) message(STATUS "Compiling with OpenMP") endif() - target_compile_options(torch INTERFACE ${OpenMP_CXX_FLAGS}) + target_compile_options(torch INTERFACE -fopenmp) target_link_libraries(torch -fopenmp) - #cmake only check for separate OpenMP library on AppleClang 7+ - #https://github.com/Kitware/CMake/blob/42212f7539040139ecec092547b7d58ef12a4d72/Modules/FindOpenMP.cmake#L252 - if (CMAKE_CXX_COMPILER_ID MATCHES "AppleClang") - if (CMAKE_CXX_COMPILER_VERSION VERSION_EQUAL "7.0" OR - CMAKE_CXX_COMPILER_VERSION VERSION_GREATER "7.0") - target_link_libraries(torch ${OpenMP_libomp_LIBRARY}) - endif() - endif() endif() if (NOT NO_API)