-
Notifications
You must be signed in to change notification settings - Fork 5.7k
Upgrade compiler‘s minimum version #728
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -51,13 +51,7 @@ option(ON_TRAVIS "Running test on travis-ci or not." OFF) | |
option(ON_COVERALLS "Generating code coverage data on coveralls or not." OFF) | ||
option(COVERALLS_UPLOAD "Uploading the generated coveralls json." ON) | ||
|
||
if(NOT CMAKE_BUILD_TYPE) | ||
set(CMAKE_BUILD_TYPE "RelWithDebInfo" CACHE STRING | ||
"Choose the type of build, options are: Debug Release RelWithDebInfo MinSizeRel" | ||
FORCE) | ||
endif() | ||
|
||
include(enableCXX11) | ||
include(cpplint) | ||
include(ccache) | ||
if(WITH_RDMA) | ||
|
@@ -83,18 +77,13 @@ if(NOT WITH_GPU) | |
|
||
list(APPEND CMAKE_CXX_SOURCE_FILE_EXTENSIONS cu) | ||
else() | ||
if(${CUDA_VERSION_MAJOR} GREATER 6) | ||
if(COMPILER_SUPPORT_CXX11) | ||
LIST(APPEND CUDA_NVCC_FLAGS -std=c++11) | ||
endif() | ||
if(${CUDA_VERSION_MAJOR} VERSION_LESS 7) | ||
message(FATAL_ERROR "Paddle need CUDA >= 7.0 to compile") | ||
endif() | ||
|
||
# TODO(yuyang18): Change it to remove std=c++11 in cuda compile. | ||
set(CUDA_PROPAGATE_HOST_FLAGS OFF) | ||
if(NOT CUDNN_FOUND) | ||
message(FATAL_ERROR "Paddle need cudnn to compile") | ||
endif() | ||
set(CUDA_NVCC_FLAGS ${CUDA_NVCC_FLAGS} "-g -O3 --use_fast_math") | ||
|
||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 已经限制了最低版本,所以COMPILER_SUPPORT_CXX11不需要了 |
||
if(WITH_AVX) | ||
set(CUDA_NVCC_FLAGS ${CUDA_NVCC_FLAGS} "-Xcompiler ${AVX_FLAG}") | ||
|
This file was deleted.
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -2,6 +2,37 @@ | |
include(CheckCXXCompilerFlag) | ||
include(CheckCCompilerFlag) | ||
include(CheckCXXSymbolExists) | ||
|
||
if(NOT CMAKE_BUILD_TYPE) | ||
set(CMAKE_BUILD_TYPE "RelWithDebInfo" CACHE STRING | ||
"Choose the type of build, options are: Debug Release RelWithDebInfo MinSizeRel" | ||
FORCE) | ||
endif() | ||
|
||
function(CheckCompilerCXX11Flag) | ||
if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") | ||
if(${CMAKE_CXX_COMPILER_VERSION} VERSION_LESS 4.8) | ||
message(FATAL_ERROR "Unsupported GCC version. GCC >= 4.8 required.") | ||
endif() | ||
elseif(CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang" OR CMAKE_CXX_COMPILER_ID STREQUAL "Clang") | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Mac AppleClang和Clang的版本号还不一样,需要区分一下。 |
||
# cmake >= 3.0 compiler id "AppleClang" on Mac OS X, otherwise "Clang" | ||
# Apple Clang is a different compiler than upstream Clang which havs different version numbers. | ||
# https://gist.github.com/yamaya/2924292 | ||
if(APPLE) # cmake < 3.0 compiler id "Clang" on Mac OS X | ||
if(${CMAKE_CXX_COMPILER_VERSION} VERSION_LESS 5.1) | ||
message(FATAL_ERROR "Unsupported AppleClang version. AppleClang >= 5.1 required.") | ||
endif() | ||
else() | ||
if (${CMAKE_CXX_COMPILER_VERSION} VERSION_LESS 3.3) | ||
message(FATAL_ERROR "Unsupported Clang version. Clang >= 3.3 required.") | ||
endif() | ||
endif() | ||
endif() | ||
endfunction() | ||
|
||
CheckCompilerCXX11Flag() | ||
LIST(APPEND CMAKE_CXX_FLAGS -std=c++11) | ||
|
||
# safe_set_flag | ||
# | ||
# Set a compile flag only if compiler is support | ||
|
@@ -41,9 +72,7 @@ macro(safe_set_nvflag flag_name) | |
CHECK_C_COMPILER_FLAG(${flag_name} C_COMPILER_SUPPORT_FLAG_${safe_name}) | ||
set(safe_name C_COMPILER_SUPPORT_FLAG_${safe_name}) | ||
if(${safe_name}) | ||
set(CUDA_NVCC_FLAGS | ||
--compiler-options;${flag_name} | ||
${CUDA_NVCC_FLAGS}) | ||
LIST(APPEND CUDA_NVCC_FLAGS -Xcompiler ${flag_name}) | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. -Xcompiler 和 --compiler-options是一个意思,Paddle统一用-Xcompiler |
||
endif() | ||
endmacro() | ||
|
||
|
@@ -109,8 +138,22 @@ foreach(flag ${GPU_COMMON_FLAGS}) | |
endforeach() | ||
|
||
|
||
set(CUDA_PROPAGATE_HOST_FLAGS OFF) | ||
|
||
# Release/Debug flags set by cmake. Such as -O3 -g -DNDEBUG etc. | ||
# So, don't set these flags here. | ||
LIST(APPEND CUDA_NVCC_FLAGS -std=c++11) | ||
LIST(APPEND CUDA_NVCC_FLAGS --use_fast_math) | ||
|
||
if(CMAKE_BUILD_TYPE STREQUAL "Debug") | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 使得nvcc flag 与 paddle build type一致 |
||
LIST(APPEND CUDA_NVCC_FLAGS ${CMAKE_CXX_FLAGS_DEBUG}) | ||
elseif(CMAKE_BUILD_TYPE STREQUAL "Release") | ||
LIST(APPEND CUDA_NVCC_FLAGS ${CMAKE_CXX_FLAGS_RELEASE}) | ||
elseif(CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo") | ||
LIST(APPEND CUDA_NVCC_FLAGS ${CMAKE_CXX_FLAGS_RELWITHDEBINFO}) | ||
elseif(CMAKE_BUILD_TYPE STREQUAL "MinSizeRel") | ||
LIST(APPEND CUDA_NVCC_FLAGS ${CMAKE_CXX_FLAGS_MINSIZEREL}) | ||
endif() | ||
|
||
function(specify_cuda_arch cuda_version cuda_arch) | ||
if(${cuda_version} VERSION_GREATER "8.0") | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -16,13 +16,16 @@ git submodule update --init --recursive | |
|
||
## <span id="requirements">Requirements</span> | ||
|
||
To compile the source code, your computer must be equipped with GCC >=4.6 or Clang compiler. | ||
### Dependencies | ||
To compile the source code, your computer must be equipped with the following dependencies. | ||
|
||
- **Compiler**: GCC >= 4.8 or Clang >= 3.3 (AppleClang >= 5.1) | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 另外注明一下编译GPU版本,nvcc >= 7.0 gcc 4.8。 There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. @gangliao In PR #723, I am making Dockerfile installs clang, which is used by woboq code browser to convert Paddle C++ code into browsable HTML files. Because I was doing incremental changes to Dockerfile, it installs both GCC and Clang. Should I make it installs just Clang (>3.3)? I checked that the Clang package of Ubuntu 14:04 installs Clang 3.4 by default. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Yeah, Clang is supported in PaddlePaddle. Clang 3.4 is also supported by the latest CUDA Toolkits. |
||
- **CMake**: version >= 2.8 | ||
- **BLAS**: MKL, OpenBlas or ATLAS | ||
- **protobuf**: version >= 2.4, **Note: 3.x is not supported** | ||
- **python**: only python 2.7 is supported currently | ||
- **Protocol Buffers**: version >= 2.4, **Note: 3.x is not supported** | ||
- **Python**: only python 2.7 is supported currently | ||
|
||
**Note:** For CUDA 7.0 and CUDA 7.5, GCC 5.0 and up are not supported! | ||
For CUDA 8.0, GCC versions later than 5.3 are not supported! | ||
|
||
### Options | ||
|
||
|
@@ -50,8 +53,8 @@ PaddlePaddle supports some build options. To enable it, first you need to instal | |
</html> | ||
|
||
**Note:** | ||
- The GPU version works best with Cuda Toolkit 7.5 and cuDNN v5. | ||
- Other versions like Cuda Toolkit 6.5, 7.0, 8.0 and cuDNN v2, v3, v4 are also supported. | ||
- The GPU version works best with Cuda Toolkit 8.0 and cuDNN v5. | ||
- Other versions like Cuda Toolkit 7.0, 7.5 and cuDNN v3, v4 are also supported. | ||
- **To utilize cuDNN v5, Cuda Toolkit 7.5 is prerequisite and vice versa.** | ||
|
||
As a simple example, consider the following: | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -34,9 +34,6 @@ else() | |
src/hl_warpctc_wrap.cc) | ||
endif() | ||
|
||
set_source_files_properties(${AVX_SOURCES} | ||
PROPERTIES COMPILE_FLAGS "-mavx") | ||
|
||
set(CUDA_CU_SOURCES | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 这个flags已经设置过了,去掉 |
||
src/hl_perturbation_util.cu | ||
src/hl_cuda_aggregate.cu | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
移到flags.cmake,使得首目录CmakeLists 更加concise