Skip to content

Commit 18a3588

Browse files
committed
Merge branch 'develop' of github.com:baidu/Paddle into feature/c_api
2 parents ddbb610 + c51ab42 commit 18a3588

File tree

122 files changed

+2794
-877
lines changed

Some content is hidden

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

122 files changed

+2794
-877
lines changed

CMakeLists.txt

Lines changed: 29 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -12,19 +12,26 @@
1212
# See the License for the specific language governing permissions and
1313
# limitations under the License
1414

15-
cmake_minimum_required(VERSION 3.0)
16-
17-
project(paddle CXX C)
18-
1915
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake")
2016
set(PROJ_ROOT ${CMAKE_SOURCE_DIR})
2117

18+
include(system)
19+
20+
if(ANDROID)
21+
cmake_minimum_required(VERSION 3.7)
22+
else()
23+
cmake_minimum_required(VERSION 3.0)
24+
endif()
25+
26+
project(paddle CXX C)
27+
2228
find_package(Sphinx)
23-
find_package(CUDA QUIET)
29+
if(NOT CMAKE_CROSSCOMPILING)
30+
find_package(CUDA QUIET)
31+
endif(NOT CMAKE_CROSSCOMPILING)
2432
find_package(Git REQUIRED)
2533
find_package(Threads REQUIRED)
2634

27-
include(system)
2835
include(simd)
2936

3037
################################ Configurations #######################################
@@ -52,6 +59,21 @@ if(NOT CMAKE_BUILD_TYPE)
5259
FORCE)
5360
endif()
5461

62+
if(ANDROID)
63+
if(${CMAKE_SYSTEM_VERSION} VERSION_LESS "21")
64+
message(FATAL_ERROR "Unsupport standalone toolchains with Android API level lower than 21")
65+
endif()
66+
67+
set(WITH_GPU OFF CACHE STRING
68+
"Disable GPU when cross-compiling for Android" FORCE)
69+
set(WITH_AVX OFF CACHE STRING
70+
"Disable AVX when cross-compiling for Android" FORCE)
71+
set(WITH_PYTHON OFF CACHE STRING
72+
"Disable PYTHON when cross-compiling for Android" FORCE)
73+
set(WITH_RDMA OFF CACHE STRING
74+
"Disable RDMA when cross-compiling for Android" FORCE)
75+
endif(ANDROID)
76+
5577
set(THIRD_PARTY_PATH "${PROJ_ROOT}/third_party" CACHE STRING
5678
"A path setting third party libraries download & build directories.")
5779

@@ -72,6 +94,7 @@ include(external/python) # download, build, install python
7294
include(external/openblas) # download, build, install openblas
7395
include(external/swig) # download, build, install swig
7496
include(external/warpctc) # download, build, install warpctc
97+
include(external/any) # download libn::any
7598

7699
include(package) # set paddle packages
77100
include(cpplint) # set paddle c++ style
@@ -82,7 +105,6 @@ include(flags) # set paddle compile flags
82105
include(cudnn) # set cudnn libraries
83106
include(version) # set PADDLE_VERSION
84107
include(coveralls) # set code coverage
85-
86108
include(configure) # add paddle env configuration
87109

88110
include_directories("${PROJ_ROOT}")

Dockerfile

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,18 @@
11
# A image for building paddle binaries
22
# Use cuda devel base image for both cpu and gpu environment
3-
FROM nvidia/cuda:7.5-cudnn5-devel-ubuntu14.04
3+
FROM nvidia/cuda:8.0-cudnn5-devel-ubuntu14.04
44
MAINTAINER PaddlePaddle Authors <[email protected]>
55

66
ARG UBUNTU_MIRROR
77
RUN /bin/bash -c 'if [[ -n ${UBUNTU_MIRROR} ]]; then sed -i 's#http://archive.ubuntu.com/ubuntu#${UBUNTU_MIRROR}#g' /etc/apt/sources.list; fi'
88

99
# ENV variables
10-
ARG BUILD_WOBOQ
1110
ARG WITH_GPU
1211
ARG WITH_AVX
1312
ARG WITH_DOC
1413
ARG WITH_STYLE_CHECK
1514

16-
ENV BUILD_WOBOQ=${BUILD_WOBOQ:-OFF}
15+
ENV WOBOQ OFF
1716
ENV WITH_GPU=${WITH_AVX:-OFF}
1817
ENV WITH_AVX=${WITH_AVX:-ON}
1918
ENV WITH_DOC=${WITH_DOC:-OFF}
@@ -37,18 +36,20 @@ RUN git config --global credential.helper store
3736
# Fix locales to en_US.UTF-8
3837
RUN localedef -i en_US -f UTF-8 en_US.UTF-8
3938

39+
# FIXME: due to temporary ipykernel dependency issue, specify ipykernel jupyter
40+
# version util jupyter fixes this issue.
4041
RUN pip install --upgrade pip && \
4142
pip install -U 'protobuf==3.1.0' && \
4243
pip install -U wheel pillow BeautifulSoup && \
4344
pip install -U docopt PyYAML sphinx && \
4445
pip install -U sphinx-rtd-theme==0.1.9 recommonmark && \
45-
pip install -U pre-commit 'requests==2.9.2' jupyter
46+
pip install pre-commit 'requests==2.9.2' 'ipykernel==4.6.0' 'jupyter==1.0.0'
4647

4748
RUN curl -sSL https://cmake.org/files/v3.4/cmake-3.4.1.tar.gz | tar -xz && \
4849
cd cmake-3.4.1 && ./bootstrap && make -j `nproc` && make install && \
4950
cd .. && rm -rf cmake-3.4.1
5051

51-
VOLUME ["/usr/share/nginx/html/data", "/usr/share/nginx/html/paddle"]
52+
VOLUME ["/woboq_out"]
5253

5354
# Configure OpenSSH server. c.f. https://docs.docker.com/engine/examples/running_ssh_service
5455
RUN mkdir /var/run/sshd

cmake/cblas.cmake

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,9 @@ set(CBLAS_FOUND OFF)
1919
set(INTEL_ROOT "/opt/intel" CACHE PATH "Folder contains intel libs")
2020
set(MKL_ROOT ${INTEL_ROOT}/mkl CACHE PATH "Folder contains MKL")
2121

22-
find_path(MKL_INCLUDE_DIR mkl.h PATHS
22+
find_path(MKL_INC_DIR mkl.h PATHS
2323
${MKL_ROOT}/include)
24-
find_path(MKL_INCLUDE_DIR mkl_lapacke.h PATHS
24+
find_path(MKL_LAPACK_INC_DIR mkl_lapacke.h PATHS
2525
${MKL_ROOT}/include)
2626
find_library(MKL_CORE_LIB NAMES mkl_core PATHS
2727
${MKL_ROOT}/lib
@@ -34,15 +34,19 @@ find_library(MKL_INTEL_LP64 NAMES mkl_intel_lp64 PATHS
3434
${MKL_ROOT}/lib/intel64)
3535

3636

37-
if(MKL_INCLUDE_DIR AND MKL_CORE_LIB AND MKL_SEQUENTIAL_LIB AND MKL_INTEL_LP64)
37+
if(MKL_INC_DIR AND MKL_CORE_LIB AND MKL_SEQUENTIAL_LIB AND MKL_INTEL_LP64)
3838
set(CBLAS_PROVIDER MKL)
39-
set(CBLAS_INC_DIR ${MKL_INCLUDE_DIR})
39+
set(CBLAS_INC_DIR ${MKL_INC_DIR})
4040
set(CBLAS_LIBRARIES ${MKL_INTEL_LP64}
4141
${MKL_SEQUENTIAL_LIB}
4242
${MKL_CORE_LIB})
4343
add_definitions(-DPADDLE_USE_MKL)
4444
message(STATUS "Found MKL (include: ${CBLAS_INC_DIR}, library: ${CBLAS_LIBRARIES})")
4545
set(CBLAS_FOUND ON)
46+
if(${MKL_LAPACK_INC_DIR})
47+
add_definitions(-DPADDLE_USE_LAPACK)
48+
message(STATUS "Found lapack in MKL (include: ${MKL_LAPACK_INC_DIR})")
49+
endif()
4650
return() # return file.
4751
endif()
4852

@@ -68,13 +72,17 @@ find_library(ATLAS_CBLAS_LIB NAMES cblas libcblas.so.3
6872
find_library(ATLAS_LIB NAMES lapack_atlas liblapack_atlas.so.3
6973
PATHS ${ATLAS_LIB_SEARCH_PATHS})
7074

71-
if(ATLAS_INC_DIR AND ATLAS_CBLAS_LIB AND ATLAS_LIB)
75+
if(ATLAS_INC_DIR AND ATLAS_CBLAS_LIB AND ATLAS_LIB AND NOT CBLAS_FOUND)
7276
set(CBLAS_PROVIDER ATLAS)
73-
set(CBLAS_INC_DIR ${ATLAS_INC_DIR} ${ATLAS_CLAPACK_INC_DIR})
77+
set(CBLAS_INC_DIR ${ATLAS_INC_DIR})
7478
set(CBLAS_LIBRARIES ${ATLAS_LIB} ${ATLAS_CBLAS_LIB})
7579
add_definitions(-DPADDLE_USE_ATLAS)
76-
message(STATUS "Found Atlas (include: ${CBLAS_INC_DIR}, library: ${CBLAS_LIBRARIES})")
80+
message(STATUS "Found ATLAS (include: ${CBLAS_INC_DIR}, library: ${CBLAS_LIBRARIES})")
7781
set(CBLAS_FOUND ON)
82+
if(ATLAS_CLAPACK_INC_DIR)
83+
add_definitions(-DPADDLE_USE_LAPACK)
84+
message(STATUS "Found lapack in ATLAS (include: ${ATLAS_CLAPACK_INC_DIR})")
85+
endif()
7886
return()
7987
endif()
8088

@@ -103,8 +111,12 @@ if(OPENBLAS_INC_DIR AND OPENBLAS_LIB)
103111
set(CBLAS_PROVIDER OPENBLAS)
104112
set(CBLAS_INC_DIR ${OPENBLAS_INC_DIR})
105113
set(CBLAS_LIBRARIES ${OPENBLAS_LIB})
106-
message(STATUS "Found OpenBlas (include: ${CBLAS_INC_DIR}, library: ${CBLAS_LIBRARIES})")
114+
message(STATUS "Found OpenBLAS (include: ${CBLAS_INC_DIR}, library: ${CBLAS_LIBRARIES})")
107115
set(CBLAS_FOUND ON)
116+
if(OPENBLAS_LAPACKE_INC_DIR)
117+
add_definitions(-DPADDLE_USE_LAPACK)
118+
message(STATUS "Found lapack in OpenBLAS (include: ${OPENBLAS_LAPACKE_INC_DIR})")
119+
endif()
108120
return()
109121
endif()
110122

cmake/configure.cmake

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,14 @@ if(NOT WITH_PROFILER)
3232
add_definitions(-DPADDLE_DISABLE_PROFILER)
3333
endif(NOT WITH_PROFILER)
3434

35+
if(NOT CMAKE_CROSSCOMPILING)
36+
if(WITH_AVX AND AVX_FOUND)
37+
set(SIMD_FLAG ${AVX_FLAG})
38+
elseif(SSE3_FOUND)
39+
set(SIMD_FLAG ${SSE3_FLAG})
40+
endif()
41+
endif()
42+
3543
if(NOT WITH_GPU)
3644
add_definitions(-DPADDLE_ONLY_CPU)
3745
add_definitions(-DHPPL_STUB_FUNC)
@@ -48,21 +56,12 @@ else()
4856
message(FATAL_ERROR "Paddle need cudnn to compile")
4957
endif()
5058

51-
if(WITH_AVX)
52-
set(CUDA_NVCC_FLAGS ${CUDA_NVCC_FLAGS} "-Xcompiler ${AVX_FLAG}")
53-
else(WITH_AVX)
54-
set(CUDA_NVCC_FLAGS ${CUDA_NVCC_FLAGS} "-Xcompiler ${SSE3_FLAG}")
55-
endif(WITH_AVX)
59+
set(CUDA_NVCC_FLAGS ${CUDA_NVCC_FLAGS} "-Xcompiler ${SIMD_FLAG}")
5660

5761
# Include cuda and cudnn
5862
include_directories(${CUDNN_INCLUDE_DIR})
5963
include_directories(${CUDA_TOOLKIT_INCLUDE})
6064
endif(NOT WITH_GPU)
6165

62-
if(WITH_AVX)
63-
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${AVX_FLAG}")
64-
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${AVX_FLAG}")
65-
else(WITH_AVX)
66-
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${SSE3_FLAG}")
67-
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${SSE3_FLAG}")
68-
endif(WITH_AVX)
66+
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${SIMD_FLAG}")
67+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${SIMD_FLAG}")

cmake/cudnn.cmake

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
if(NOT WITH_GPU)
2+
return()
3+
endif()
4+
15
set(CUDNN_ROOT "" CACHE PATH "CUDNN ROOT")
26
find_path(CUDNN_INCLUDE_DIR cudnn.h
37
PATHS ${CUDNN_ROOT} ${CUDNN_ROOT}/include
@@ -11,6 +15,7 @@ list(APPEND CUDNN_CHECK_LIBRARY_DIRS
1115
${CUDNN_ROOT}
1216
${CUDNN_ROOT}/lib64
1317
${CUDNN_ROOT}/lib
18+
${CUDNN_ROOT}/lib/x86_64-linux-gnu
1419
$ENV{CUDNN_ROOT}
1520
$ENV{CUDNN_ROOT}/lib64
1621
$ENV{CUDNN_ROOT}/lib

cmake/external/any.cmake

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
INCLUDE(ExternalProject)
2+
3+
SET(ANY_SOURCE_DIR ${THIRD_PARTY_PATH}/any)
4+
5+
INCLUDE_DIRECTORIES(${ANY_SOURCE_DIR}/src/linb_any)
6+
7+
ExternalProject_Add(
8+
linb_any
9+
${EXTERNAL_PROJECT_LOG_ARGS}
10+
GIT_REPOSITORY "https://github.com/thelink2012/any.git"
11+
GIT_TAG "8fef1e93710a0edf8d7658999e284a1142c4c020"
12+
PREFIX ${ANY_SOURCE_DIR}
13+
UPDATE_COMMAND ""
14+
CONFIGURE_COMMAND ""
15+
BUILD_COMMAND ""
16+
INSTALL_COMMAND ""
17+
TEST_COMMAND ""
18+
)
19+
20+
add_definitions(-DANY_IMPL_ANY_CAST_MOVEABLE)

cmake/external/gflags.cmake

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,9 +31,17 @@ ExternalProject_Add(
3131
GIT_REPOSITORY "https://github.com/gflags/gflags.git"
3232
PREFIX ${GFLAGS_SOURCES_DIR}
3333
UPDATE_COMMAND ""
34+
CMAKE_ARGS -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}
35+
CMAKE_ARGS -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
36+
CMAKE_ARGS -DCMAKE_CXX_FLAGS=${CMAKE_CXX_FLAGS}
37+
CMAKE_ARGS -DCMAKE_C_FLAGS=${CMAKE_C_FLAGS}
3438
CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${GFLAGS_INSTALL_DIR}
3539
CMAKE_ARGS -DCMAKE_POSITION_INDEPENDENT_CODE=ON
3640
CMAKE_ARGS -DBUILD_TESTING=OFF
41+
CMAKE_ARGS -DCMAKE_BUILD_TYPE=Release
42+
CMAKE_CACHE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=${GFLAGS_INSTALL_DIR}
43+
-DCMAKE_POSITION_INDEPENDENT_CODE:BOOL=ON
44+
-DCMAKE_BUILD_TYPE:STRING=Release
3745
)
3846

3947
LIST(APPEND external_project_dependencies gflags)

cmake/external/glog.cmake

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,11 +33,19 @@ ExternalProject_Add(
3333
GIT_REPOSITORY "https://github.com/google/glog.git"
3434
PREFIX ${GLOG_SOURCES_DIR}
3535
UPDATE_COMMAND ""
36+
CMAKE_ARGS -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}
37+
CMAKE_ARGS -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
38+
CMAKE_ARGS -DCMAKE_CXX_FLAGS=${CMAKE_CXX_FLAGS}
39+
CMAKE_ARGS -DCMAKE_C_FLAGS=${CMAKE_C_FLAGS}
3640
CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${GLOG_INSTALL_DIR}
3741
CMAKE_ARGS -DCMAKE_POSITION_INDEPENDENT_CODE=ON
3842
CMAKE_ARGS -DWITH_GFLAGS=ON
3943
CMAKE_ARGS -Dgflags_DIR=${GFLAGS_INSTALL_DIR}/lib/cmake/gflags
4044
CMAKE_ARGS -DBUILD_TESTING=OFF
45+
CMAKE_ARGS -DCMAKE_BUILD_TYPE=Release
46+
CMAKE_CACHE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=${GLOG_INSTALL_DIR}
47+
-DCMAKE_POSITION_INDEPENDENT_CODE:BOOL=ON
48+
-DCMAKE_BUILD_TYPE:STRING=Release
4149
)
4250

4351
LIST(APPEND external_project_dependencies glog)

cmake/external/gtest.cmake

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,11 +41,19 @@ IF(WITH_TESTING)
4141
GIT_TAG "release-1.8.0"
4242
PREFIX ${GTEST_SOURCES_DIR}
4343
UPDATE_COMMAND ""
44-
CMAKE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=${GTEST_INSTALL_DIR}
44+
CMAKE_ARGS -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}
45+
CMAKE_ARGS -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
46+
CMAKE_ARGS -DCMAKE_CXX_FLAGS=${CMAKE_CXX_FLAGS}
47+
CMAKE_ARGS -DCMAKE_C_FLAGS=${CMAKE_C_FLAGS}
48+
CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${GTEST_INSTALL_DIR}
4549
CMAKE_ARGS -DCMAKE_POSITION_INDEPENDENT_CODE=ON
4650
CMAKE_ARGS -DBUILD_GMOCK=ON
4751
CMAKE_ARGS -Dgtest_disable_pthreads=ON
4852
CMAKE_ARGS -Dgtest_force_shared_crt=ON
53+
CMAKE_ARGS -DCMAKE_BUILD_TYPE=Release
54+
CMAKE_CACHE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=${GTEST_INSTALL_DIR}
55+
-DCMAKE_POSITION_INDEPENDENT_CODE:BOOL=ON
56+
-DCMAKE_BUILD_TYPE:STRING=Release
4957
)
5058
LIST(APPEND external_project_dependencies gtest)
5159
ENDIF(WITH_TESTING)

cmake/external/openblas.cmake

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,14 +29,33 @@ IF(NOT ${CBLAS_FOUND})
2929

3030
IF(CMAKE_COMPILER_IS_GNUCC)
3131
ENABLE_LANGUAGE(Fortran)
32-
LIST(APPEND CBLAS_LIBRARIES gfortran pthread)
32+
if (NOT CMAKE_Fortran_COMPILER_VERSION)
33+
# cmake < 3.4 cannot get CMAKE_Fortran_COMPILER_VERSION directly.
34+
execute_process(COMMAND ${CMAKE_Fortran_COMPILER} -dumpversion
35+
OUTPUT_VARIABLE CMAKE_Fortran_COMPILER_VERSION)
36+
endif()
37+
string(REGEX MATCHALL "[0-9]+" Fortran_VERSION ${CMAKE_Fortran_COMPILER_VERSION})
38+
list(GET Fortran_VERSION 0 Fortran_MAJOR)
39+
list(GET Fortran_VERSION 1 Fortran_MINOR)
40+
find_library(GFORTRAN_LIBRARY NAMES gfortran PATHS
41+
/lib
42+
/usr/lib
43+
/usr/lib/gcc/x86_64-linux-gnu/${Fortran_MAJOR}.${Fortran_MINOR}/
44+
/usr/lib/gcc/x86_64-linux-gnu/${Fortran_MAJOR}/)
45+
if (NOT GFORTRAN_LIBRARY)
46+
message(FATAL_ERROR "Cannot found gfortran library which it is used by openblas")
47+
endif()
48+
find_package(Threads REQUIRED)
49+
LIST(APPEND CBLAS_LIBRARIES ${GFORTRAN_LIBRARY} ${CMAKE_THREAD_LIBS_INIT})
3350
ENDIF(CMAKE_COMPILER_IS_GNUCC)
3451

3552
IF(NOT CMAKE_Fortran_COMPILER)
3653
MESSAGE(FATAL_ERROR "To build lapack in libopenblas, "
3754
"you need to set gfortran compiler: cmake .. -DCMAKE_Fortran_COMPILER=...")
3855
ENDIF(NOT CMAKE_Fortran_COMPILER)
3956

57+
ADD_DEFINITIONS(-DPADDLE_USE_LAPACK)
58+
4059
ExternalProject_Add(
4160
openblas
4261
${EXTERNAL_PROJECT_LOG_ARGS}

0 commit comments

Comments
 (0)