Skip to content

Commit c8f6e70

Browse files
committed
Merge branch 'develop' of https://github.com/PaddlePaddle/Paddle into rewrite_allocation
test=develop
2 parents e5c4cf6 + 9be99b1 commit c8f6e70

File tree

259 files changed

+6574
-5613
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

259 files changed

+6574
-5613
lines changed

AUTHORS.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@
4343
| qingqing01 | Qing-Qing Dang |
4444
| reyoung | Yang Yu |
4545
| Superjom | Chun-Wei Yan |
46+
| tensor-tang | Jian Tang |
4647
| tianbingsz | Tian-Bing Xu |
4748
| tpatejko | Tomasz Patejko |
4849
| typhoonzero | Yi Wu |

CMakeLists.txt

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,11 @@ message(STATUS "C compiler: ${CMAKE_C_COMPILER}, version: "
2626
"${CMAKE_C_COMPILER_ID} ${CMAKE_C_COMPILER_VERSION}")
2727
if(WIN32)
2828
set(CMAKE_STATIC_LIBRARY_PREFIX lib)
29+
add_definitions("/DGOOGLE_GLOG_DLL_DECL=")
30+
set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} /bigobj /MTd")
31+
set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} /bigobj /MT")
32+
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /bigobj /MTd")
33+
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /bigobj /MT")
2934
endif(WIN32)
3035

3136
if(NOT CMAKE_CROSSCOMPILING)
@@ -41,6 +46,7 @@ option(WITH_GPU "Compile PaddlePaddle with NVIDIA GPU" ${CUDA_F
4146
option(WITH_AMD_GPU "Compile PaddlePaddle with AMD GPU" OFF)
4247
option(WITH_AVX "Compile PaddlePaddle with AVX intrinsics" ${AVX_FOUND})
4348
option(WITH_MKL "Compile PaddlePaddle with MKL support." ${AVX_FOUND})
49+
option(WITH_NGRAPH "Compile PaddlePaddle with nGraph support." OFF)
4450
option(WITH_DSO "Compile PaddlePaddle with dynamic linked CUDA" ON)
4551
option(WITH_TESTING "Compile PaddlePaddle with unit testing" OFF)
4652
option(WITH_SWIG_PY "Compile PaddlePaddle with inference api" ON)
@@ -65,6 +71,8 @@ option(WITH_ARM_FP16 "Use half precision support on armv8.2-a cpu" OFF)
6571
option(WITH_CONTRIB "Compile the third-party contributation" OFF)
6672
option(REPLACE_ENFORCE_GLOG "Replace PADDLE_ENFORCE with glog/CHECK for better debug." OFF)
6773
option(WITH_ANAKIN "Compile with Anakin library" OFF)
74+
option(ANAKIN_BUILD_FAT_BIN "Build anakin cuda fat-bin lib for all device plantform, ignored when WITH_ANAKIN=OFF" OFF)
75+
option(ANAKIN_BUILD_CROSS_PLANTFORM "Build anakin lib for any nvidia device plantform. ignored when WITH_ANAKIN=OFF" ON)
6876
option(WITH_GRPC "Use grpc as the default rpc framework" ${WITH_DISTRIBUTE})
6977
option(WITH_BRPC_RDMA "Use brpc rdma as the rpc protocal" OFF)
7078
option(ON_INFER "Turn on inference optimization." OFF)
@@ -103,6 +111,8 @@ if(ANDROID OR IOS)
103111
"Disable RDMA when cross-compiling for Android and iOS" FORCE)
104112
set(WITH_MKL OFF CACHE STRING
105113
"Disable MKL when cross-compiling for Android and iOS" FORCE)
114+
set(WITH_NGRAPH OFF CACHE STRING
115+
"Disable nGraph when cross-compiling for Android and iOS" FORCE)
106116
set(WITH_GOLANG OFF CACHE STRING
107117
"Disable golang when cross-compiling for Android and iOS" FORCE)
108118

@@ -171,6 +181,7 @@ include(external/protobuf) # download, build, install protobuf
171181
include(external/python) # download, build, install python
172182
include(external/openblas) # download, build, install openblas
173183
include(external/mkldnn) # download, build, install mkldnn
184+
include(external/ngraph) # download, build, install nGraph
174185
include(external/swig) # download, build, install swig
175186
include(external/boost) # download boost
176187
include(external/any) # download libn::any

cmake/cuda.cmake

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -157,6 +157,9 @@ list(APPEND EXTERNAL_LIBS ${CUDA_LIBRARIES} ${CUDA_rt_LIBRARY})
157157
if(NOT WITH_DSO)
158158
# TODO(panyx0718): CUPTI only allows DSO?
159159
list(APPEND EXTERNAL_LIBS ${CUDNN_LIBRARY} ${CUPTI_LIBRARY} ${CUDA_CUBLAS_LIBRARIES} ${CUDA_curand_LIBRARY} ${NCCL_LIBRARY})
160+
if(WIN32)
161+
set_property(GLOBAL PROPERTY CUDA_MODULES ${CUDNN_LIBRARY} ${CUDA_CUBLAS_LIBRARIES} ${CUDA_curand_LIBRARY})
162+
endif(WIN32)
160163
endif(NOT WITH_DSO)
161164

162165
# setting nvcc arch flags
@@ -196,10 +199,12 @@ elseif(CMAKE_BUILD_TYPE STREQUAL "MinSizeRel")
196199
list(APPEND CUDA_NVCC_FLAGS ${CMAKE_CXX_FLAGS_RELEASE})
197200
endif()
198201
else(NOT WIN32)
199-
if(CMAKE_BUILD_TYPE STREQUAL "Release")
202+
if(CMAKE_BUILD_TYPE STREQUAL "Debug")
203+
list(APPEND CUDA_NVCC_FLAGS "-g -G")
204+
elseif(CMAKE_BUILD_TYPE STREQUAL "Release")
200205
list(APPEND CUDA_NVCC_FLAGS "-O3 -DNDEBUG")
201206
else()
202-
message(FATAL "Windows only support Release build now. Please set visual studio build type to Release, x64 build.")
207+
message(FATAL "Windows only support Release or Debug build now. Please set visual studio build type to Release/Debug, x64 build.")
203208
endif()
204209
endif(NOT WIN32)
205210

cmake/cudnn.cmake

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,12 @@ if(NOT WITH_GPU)
22
return()
33
endif()
44

5-
set(CUDNN_ROOT "/usr" CACHE PATH "CUDNN ROOT")
5+
if(WIN32)
6+
set(CUDNN_ROOT ${CUDA_TOOLKIT_ROOT_DIR})
7+
else(WIN32)
8+
set(CUDNN_ROOT "/usr" CACHE PATH "CUDNN ROOT")
9+
endif(WIN32)
10+
611
find_path(CUDNN_INCLUDE_DIR cudnn.h
712
PATHS ${CUDNN_ROOT} ${CUDNN_ROOT}/include
813
$ENV{CUDNN_ROOT} $ENV{CUDNN_ROOT}/include ${CUDA_TOOLKIT_INCLUDE}

cmake/external/anakin.cmake

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -58,19 +58,21 @@ ExternalProject_Add(
5858
-DPROTOBUF_ROOT=${THIRD_PARTY_PATH}/install/protobuf
5959
-DMKLML_ROOT=${THIRD_PARTY_PATH}/install/mklml
6060
-DENABLE_OP_TIMER=${ANAKIN_ENABLE_OP_TIMER}
61+
-DBUILD_FAT_BIN=${ANAKIN_BUILD_FAT_BIN}
62+
-DBUILD_CROSS_PLANTFORM=${ANAKIN_BUILD_CROSS_PLANTFORM}
6163
${EXTERNAL_OPTIONAL_ARGS}
6264
CMAKE_CACHE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=${ANAKIN_INSTALL_DIR}
6365
)
6466

6567
message(STATUS "Anakin for inference is enabled")
6668
message(STATUS "Anakin is set INCLUDE:${ANAKIN_INCLUDE} LIBRARY:${ANAKIN_LIBRARY}")
67-
69+
add_dependencies(extern_anakin protobuf mklml)
6870
add_library(anakin_shared SHARED IMPORTED GLOBAL)
6971
set_property(TARGET anakin_shared PROPERTY IMPORTED_LOCATION ${ANAKIN_SHARED_LIB})
70-
add_dependencies(anakin_shared extern_anakin protobuf mklml)
72+
add_dependencies(anakin_shared extern_anakin)
7173

7274
add_library(anakin_saber SHARED IMPORTED GLOBAL)
7375
set_property(TARGET anakin_saber PROPERTY IMPORTED_LOCATION ${ANAKIN_SABER_LIB})
74-
add_dependencies(anakin_saber extern_anakin protobuf mklml)
76+
add_dependencies(anakin_saber extern_anakin)
7577

7678
list(APPEND external_project_dependencies anakin_shared anakin_saber)

cmake/external/boost.cmake

Lines changed: 6 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -28,34 +28,28 @@ if((NOT DEFINED BOOST_TAR) OR (NOT DEFINED BOOST_URL))
2828
set(BOOST_TAR "boost_1_41_0" CACHE STRING "" FORCE)
2929
set(BOOST_URL "http://paddlepaddledeps.cdn.bcebos.com/${BOOST_TAR}.tar.gz" CACHE STRING "" FORCE)
3030
endif()
31-
IF (WIN32)
32-
MESSAGE(WARNING, "In windows, boost can not be downloaded automaticlly, please build it manually and put it at " ${THIRD_PARTY_PATH}install/boost)
33-
else()
34-
MESSAGE(STATUS "BOOST_TAR: ${BOOST_TAR}, BOOST_URL: ${BOOST_URL}")
35-
ENDIF(WIN32)
31+
32+
MESSAGE(STATUS "BOOST_TAR: ${BOOST_TAR}, BOOST_URL: ${BOOST_URL}")
3633

3734
set(BOOST_SOURCES_DIR ${THIRD_PARTY_PATH}/boost)
3835
set(BOOST_DOWNLOAD_DIR "${BOOST_SOURCES_DIR}/src/${BOOST_PROJECT}")
39-
set(BOOST_INCLUDE_DIR "${BOOST_DOWNLOAD_DIR}/${BOOST_TAR}" CACHE PATH "boost include directory." FORCE)
40-
set_directory_properties(PROPERTIES CLEAN_NO_CUSTOM 1)
4136

37+
set(BOOST_INCLUDE_DIR "${BOOST_DOWNLOAD_DIR}" CACHE PATH "boost include directory." FORCE)
38+
set_directory_properties(PROPERTIES CLEAN_NO_CUSTOM 1)
4239
include_directories(${BOOST_INCLUDE_DIR})
4340

44-
if (NOT WIN32)
4541
ExternalProject_Add(
4642
${BOOST_PROJECT}
4743
${EXTERNAL_PROJECT_LOG_ARGS}
4844
DOWNLOAD_DIR ${BOOST_DOWNLOAD_DIR}
49-
DOWNLOAD_COMMAND wget --no-check-certificate ${BOOST_URL} -c -q -O ${BOOST_TAR}.tar.gz
50-
&& tar zxf ${BOOST_TAR}.tar.gz
45+
URL ${BOOST_URL}
5146
DOWNLOAD_NO_PROGRESS 1
5247
PREFIX ${BOOST_SOURCES_DIR}
5348
CONFIGURE_COMMAND ""
5449
BUILD_COMMAND ""
5550
INSTALL_COMMAND ""
5651
UPDATE_COMMAND ""
57-
)
58-
endif(NOT WIN32)
52+
)
5953

6054
if (${CMAKE_VERSION} VERSION_LESS "3.3.0" OR NOT WIN32)
6155
set(dummyfile ${CMAKE_CURRENT_BINARY_DIR}/boost_dummy.c)

cmake/external/gflags.cmake

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,12 @@ ExternalProject_Add(
3535
CMAKE_ARGS -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}
3636
-DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
3737
-DCMAKE_CXX_FLAGS=${CMAKE_CXX_FLAGS}
38+
-DCMAKE_CXX_FLAGS_RELEASE=${CMAKE_CXX_FLAGS_RELEASE}
39+
-DCMAKE_CXX_FLAGS_DEBUG=${CMAKE_CXX_FLAGS_DEBUG}
3840
-DCMAKE_C_FLAGS=${CMAKE_C_FLAGS}
41+
-DCMAKE_C_FLAGS_DEBUG=${CMAKE_C_FLAGS_DEBUG}
42+
-DCMAKE_C_FLAGS_RELEASE=${CMAKE_C_FLAGS_RELEASE}
43+
-DBUILD_STATIC_LIBS=ON
3944
-DCMAKE_INSTALL_PREFIX=${GFLAGS_INSTALL_DIR}
4045
-DCMAKE_POSITION_INDEPENDENT_CODE=ON
4146
-DBUILD_TESTING=OFF
@@ -48,8 +53,8 @@ ExternalProject_Add(
4853
IF(WIN32)
4954
IF(NOT EXISTS "${GFLAGS_INSTALL_DIR}/lib/libgflags.lib")
5055
add_custom_command(TARGET extern_gflags POST_BUILD
51-
COMMAND cmake -E rename ${GFLAGS_INSTALL_DIR}/lib/gflags_static.lib ${GFLAGS_INSTALL_DIR}/lib/libgflags.lib
52-
)
56+
COMMAND cmake -E copy ${GFLAGS_INSTALL_DIR}/lib/gflags_static.lib ${GFLAGS_INSTALL_DIR}/lib/libgflags.lib
57+
)
5358
ENDIF()
5459
ENDIF(WIN32)
5560
ADD_LIBRARY(gflags STATIC IMPORTED GLOBAL)

cmake/external/glog.cmake

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,11 @@ ExternalProject_Add(
4646
CMAKE_ARGS -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}
4747
-DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
4848
-DCMAKE_CXX_FLAGS=${CMAKE_CXX_FLAGS}
49+
-DCMAKE_CXX_FLAGS_RELEASE=${CMAKE_CXX_FLAGS_RELEASE}
50+
-DCMAKE_CXX_FLAGS_DEBUG=${CMAKE_CXX_FLAGS_DEBUG}
4951
-DCMAKE_C_FLAGS=${CMAKE_C_FLAGS}
52+
-DCMAKE_C_FLAGS_DEBUG=${CMAKE_C_FLAGS_DEBUG}
53+
-DCMAKE_C_FLAGS_RELEASE=${CMAKE_C_FLAGS_RELEASE}
5054
-DCMAKE_INSTALL_PREFIX=${GLOG_INSTALL_DIR}
5155
-DCMAKE_INSTALL_LIBDIR=${GLOG_INSTALL_DIR}/lib
5256
-DCMAKE_POSITION_INDEPENDENT_CODE=ON
@@ -63,7 +67,7 @@ ExternalProject_Add(
6367
IF(WIN32)
6468
IF(NOT EXISTS "${GLOG_INSTALL_DIR}/lib/libglog.lib")
6569
add_custom_command(TARGET extern_glog POST_BUILD
66-
COMMAND cmake -E rename ${GLOG_INSTALL_DIR}/lib/glog.lib ${GLOG_INSTALL_DIR}/lib/libglog.lib
70+
COMMAND cmake -E copy ${GLOG_INSTALL_DIR}/lib/glog.lib ${GLOG_INSTALL_DIR}/lib/libglog.lib
6771
)
6872
ENDIF()
6973
ENDIF(WIN32)

cmake/external/mkldnn.cmake

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,6 @@ SET(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
3737
SET(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_RPATH}" "${MKLDNN_INSTALL_DIR}/lib")
3838

3939
INCLUDE_DIRECTORIES(${MKLDNN_INC_DIR}) # For MKLDNN code to include internal headers.
40-
INCLUDE_DIRECTORIES(${THIRD_PARTY_PATH}/install) # For Paddle code to include mkldnn.h
4140

4241
IF(${CBLAS_PROVIDER} STREQUAL "MKLML")
4342
SET(MKLDNN_DEPENDS ${MKLML_PROJECT})

cmake/external/ngraph.cmake

Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
# Copyright (c) 2018 PaddlePaddle Authors. All Rights Reserved.
2+
#
3+
# Licensed under the Apache License, Version 2.0 (the "License");
4+
# you may not use this file except in compliance with the License.
5+
# You may obtain a copy of the License at
6+
#
7+
# http://www.apache.org/licenses/LICENSE-2.0
8+
#
9+
# Unless required by applicable law or agreed to in writing, software
10+
# distributed under the License is distributed on an "AS IS" BASIS,
11+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
# See the License for the specific language governing permissions and
13+
# limitations under the License.
14+
15+
add_library(ngraph INTERFACE)
16+
17+
IF(WIN32 OR APPLE)
18+
MESSAGE(WARNING
19+
"Windows or Mac is not supported with nGraph in Paddle yet."
20+
"Force WITH_NGRAPH=OFF")
21+
SET(WITH_NGRAPH OFF CACHE STRING "Disable nGraph in Windows and MacOS" FORCE)
22+
ENDIF()
23+
24+
IF(${WITH_NGRAPH} AND NOT ${WITH_MKLDNN})
25+
MESSAGE(WARNING
26+
"nGraph needs mkl-dnn to be enabled."
27+
"Force WITH_NGRAPH=OFF")
28+
SET(WITH_NGRAPH OFF CACHE STRING "Disable nGraph if mkl-dnn is disabled" FORCE)
29+
ENDIF()
30+
31+
IF(NOT ${WITH_NGRAPH})
32+
return()
33+
ENDIF()
34+
35+
INCLUDE(ExternalProject)
36+
37+
SET(NGRAPH_PROJECT "extern_ngraph")
38+
SET(NGRAPH_VERSION "0.9")
39+
SET(NGRAPH_GIT_TAG "f9fd9d4cc318dc59dd4b68448e7fbb5f67a28bd0")
40+
SET(NGRAPH_SOURCES_DIR ${THIRD_PARTY_PATH}/ngraph)
41+
SET(NGRAPH_INSTALL_DIR ${THIRD_PARTY_PATH}/install/ngraph)
42+
SET(NGRAPH_INC_DIR ${NGRAPH_INSTALL_DIR}/include)
43+
SET(NGRAPH_SHARED_LIB_NAME libngraph.so.${NGRAPH_VERSION})
44+
SET(NGRAPH_CPU_LIB_NAME libcpu_backend.so)
45+
SET(NGRAPH_TBB_LIB_NAME libtbb.so.2)
46+
SET(NGRAPH_GIT_REPO "https://github.com/NervanaSystems/ngraph.git")
47+
48+
ExternalProject_Add(
49+
${NGRAPH_PROJECT}
50+
${EXTERNAL_PROJECT_LOG_ARGS}
51+
DEPENDS ${MKLDNN_PROJECT} ${MKLML_PROJECT}
52+
GIT_REPOSITORY ${NGRAPH_GIT_REPO}
53+
GIT_TAG ${NGRAPH_GIT_TAG}
54+
PREFIX ${NGRAPH_SOURCES_DIR}
55+
UPDATE_COMMAND ""
56+
CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${NGRAPH_INSTALL_DIR}
57+
CMAKE_ARGS -DNGRAPH_UNIT_TEST_ENABLE=FALSE
58+
CMAKE_ARGS -DNGRAPH_TOOLS_ENABLE=FALSE
59+
CMAKE_ARGS -DNGRAPH_INTERPRETER_ENABLE=FALSE
60+
CMAKE_ARGS -DNGRAPH_DEX_ONLY=TRUE
61+
CMAKE_ARGS -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
62+
CMAKE_ARGS -DMKLDNN_INCLUDE_DIR=${MKLDNN_INC_DIR}
63+
CMAKE_ARGS -DMKLDNN_LIB_DIR=${MKLDNN_INSTALL_DIR}/lib
64+
)
65+
66+
if(UNIX AND NOT APPLE)
67+
include(GNUInstallDirs)
68+
SET(NGRAPH_LIB_DIR ${NGRAPH_INSTALL_DIR}/${CMAKE_INSTALL_LIBDIR})
69+
else()
70+
SET(NGRAPH_LIB_DIR ${NGRAPH_INSTALL_DIR}/lib)
71+
endif()
72+
MESSAGE(STATUS "nGraph lib will be installed at: ${NGRAPH_LIB_DIR}")
73+
74+
SET(NGRAPH_SHARED_LIB ${NGRAPH_LIB_DIR}/${NGRAPH_SHARED_LIB_NAME})
75+
SET(NGRAPH_CPU_LIB ${NGRAPH_LIB_DIR}/${NGRAPH_CPU_LIB_NAME})
76+
SET(NGRAPH_TBB_LIB ${NGRAPH_LIB_DIR}/${NGRAPH_TBB_LIB_NAME})
77+
78+
# Workaround for nGraph expecting mklml to be in mkldnn install directory.
79+
ExternalProject_Add_Step(
80+
${NGRAPH_PROJECT}
81+
PrepareMKL
82+
COMMAND ${CMAKE_COMMAND} -E create_symlink ${MKLML_LIB} ${MKLDNN_INSTALL_DIR}/lib/libmklml_intel.so
83+
COMMAND ${CMAKE_COMMAND} -E create_symlink ${MKLML_IOMP_LIB} ${MKLDNN_INSTALL_DIR}/lib/libiomp5.so
84+
DEPENDEES download
85+
DEPENDERS configure
86+
)
87+
88+
add_dependencies(ngraph ${NGRAPH_PROJECT})
89+
target_compile_definitions(ngraph INTERFACE -DPADDLE_WITH_NGRAPH)
90+
target_include_directories(ngraph INTERFACE ${NGRAPH_INC_DIR})
91+
target_link_libraries(ngraph INTERFACE ${NGRAPH_SHARED_LIB})
92+
LIST(APPEND external_project_dependencies ngraph)

0 commit comments

Comments
 (0)