Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
机器未来
Paddle
提交
89a41580
P
Paddle
项目概览
机器未来
/
Paddle
与 Fork 源项目一致
Fork自
PaddlePaddle / Paddle
通知
1
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
1
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
P
Paddle
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
1
Issue
1
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
89a41580
编写于
7月 18, 2017
作者:
T
tensor-tang
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
enable MKLDNN library and MKL small package
上级
875946ff
变更
6
显示空白变更内容
内联
并排
Showing
6 changed file
with
176 addition
and
54 deletion
+176
-54
CMakeLists.txt
CMakeLists.txt
+7
-0
cmake/cblas.cmake
cmake/cblas.cmake
+30
-10
cmake/configure.cmake
cmake/configure.cmake
+6
-0
cmake/external/mkldnn.cmake
cmake/external/mkldnn.cmake
+78
-0
paddle/math/MathFunctions.cpp
paddle/math/MathFunctions.cpp
+49
-44
paddle/math/MathFunctions.h
paddle/math/MathFunctions.h
+6
-0
未找到文件。
CMakeLists.txt
浏览文件 @
89a41580
...
...
@@ -37,6 +37,7 @@ include(simd)
################################ Configurations #######################################
option
(
WITH_GPU
"Compile PaddlePaddle with NVIDIA GPU"
${
CUDA_FOUND
}
)
option
(
WITH_AVX
"Compile PaddlePaddle with AVX intrinsics"
${
AVX_FOUND
}
)
option
(
WITH_MKLDNN
"Compile PaddlePaddle with mkl-dnn support."
ON
)
option
(
WITH_DSO
"Compile PaddlePaddle with dynamic linked CUDA"
ON
)
option
(
WITH_TESTING
"Compile PaddlePaddle with unit testing"
ON
)
option
(
WITH_SWIG_PY
"Compile PaddlePaddle with inference api"
ON
)
...
...
@@ -94,6 +95,7 @@ include(external/glog) # download, build, install glog
include
(
external/gtest
)
# download, build, install gtest
include
(
external/protobuf
)
# download, build, install protobuf
include
(
external/python
)
# download, build, install python
include
(
external/mkldnn
)
# download, build, install mkldnn
include
(
external/openblas
)
# download, build, install openblas
include
(
external/swig
)
# download, build, install swig
include
(
external/warpctc
)
# download, build, install warpctc
...
...
@@ -136,6 +138,11 @@ if(WITH_GPU)
endif
(
NOT WITH_DSO
)
endif
(
WITH_GPU
)
if
(
WITH_MKLDNN
)
message
(
STATUS
"MKLDNN_LIBRARY:
${
MKLDNN_LIBRARY
}
"
)
list
(
APPEND EXTERNAL_LIBS
${
MKLDNN_LIBRARY
}
${
MKL_LITE_LIB_IOMP
}
)
endif
()
if
(
USE_NNPACK
)
include
(
external/nnpack
)
list
(
APPEND EXTERNAL_LIBS
${
NNPACK_LIBS
}
)
...
...
cmake/cblas.cmake
浏览文件 @
89a41580
...
...
@@ -16,22 +16,42 @@
set
(
CBLAS_FOUND OFF
)
## Find MKL First.
set
(
INTEL_ROOT
"/opt/intel"
CACHE PATH
"Folder contains intel libs"
)
set
(
MKL_ROOT
${
INTEL_ROOT
}
/mkl CACHE PATH
"Folder contains MKL"
)
set
(
INTEL_MKL_ROOT
"/opt/intel/mkl"
CACHE PATH
"Folder contains intel mkl libs"
)
set
(
MKL_ROOT $ENV{MKL_ROOT} CACHE PATH
"Folder contains env MKL"
)
set
(
MKL_INCLUDE_SEARCH_PATHS
${
MKL_ROOT
}
/include
${
INTEL_MKL_ROOT
}
/include
)
set
(
MKL_LIB_SEARCH_PATHS
${
MKL_ROOT
}
/lib
${
MKL_ROOT
}
/lib/intel64
${
INTEL_MKL_ROOT
}
/lib
${
INTEL_MKL_ROOT
}
/lib/intel64
)
if
(
MKL_LITE_INC_DIR AND MKL_LITE_LIB
)
set
(
CBLAS_FOUND ON
)
set
(
CBLAS_PROVIDER MKL_LITE
)
set
(
CBLAS_INC_DIR
${
MKL_LITE_INC_DIR
}
)
set
(
CBLAS_LIBRARIES
${
MKL_LITE_LIB
}
)
add_definitions
(
-DPADDLE_USE_MKL_LITE
)
add_definitions
(
-DLAPACK_FOUND
)
message
(
STATUS
"Found cblas and lapack in MKL Lite "
"(include:
${
MKL_LITE_INC_DIR
}
, library:
${
CBLAS_LIBRARIES
}
)"
)
return
()
endif
()
find_path
(
MKL_INC_DIR mkl.h PATHS
${
MKL_
ROOT
}
/include
)
${
MKL_
INCLUDE_SEARCH_PATHS
}
)
find_path
(
MKL_LAPACK_INC_DIR mkl_lapacke.h PATHS
${
MKL_
ROOT
}
/include
)
${
MKL_
INCLUDE_SEARCH_PATHS
}
)
find_library
(
MKL_CORE_LIB NAMES mkl_core PATHS
${
MKL_ROOT
}
/lib
${
MKL_ROOT
}
/lib/intel64
)
${
MKL_LIB_SEARCH_PATHS
}
)
find_library
(
MKL_SEQUENTIAL_LIB NAMES mkl_sequential PATHS
${
MKL_ROOT
}
/lib
${
MKL_ROOT
}
/lib/intel64
)
${
MKL_LIB_SEARCH_PATHS
}
)
find_library
(
MKL_INTEL_LP64 NAMES mkl_intel_lp64 PATHS
${
MKL_ROOT
}
/lib
${
MKL_ROOT
}
/lib/intel64
)
${
MKL_LIB_SEARCH_PATHS
}
)
if
(
MKL_LAPACK_INC_DIR AND MKL_INC_DIR AND MKL_CORE_LIB AND MKL_SEQUENTIAL_LIB AND MKL_INTEL_LP64
)
set
(
CBLAS_FOUND ON
)
...
...
cmake/configure.cmake
浏览文件 @
89a41580
...
...
@@ -67,6 +67,12 @@ else()
include_directories
(
${
CUDA_TOOLKIT_INCLUDE
}
)
endif
(
NOT WITH_GPU
)
if
(
WITH_MKLDNN
)
add_definitions
(
-DPADDLE_USE_MKLDNN
)
set
(
CMAKE_C_FLAGS
"
${
CMAKE_C_FLAGS
}
${
OpenMP_C_FLAGS
}
"
)
set
(
CMAKE_CXX_FLAGS
"
${
CMAKE_CXX_FLAGS
}
${
OpenMP_CXX_FLAGS
}
"
)
endif
(
WITH_MKLDNN
)
set
(
CMAKE_C_FLAGS
"
${
CMAKE_C_FLAGS
}
${
SIMD_FLAG
}
"
)
set
(
CMAKE_CXX_FLAGS
"
${
CMAKE_CXX_FLAGS
}
${
SIMD_FLAG
}
"
)
...
...
cmake/external/mkldnn.cmake
0 → 100644
浏览文件 @
89a41580
# Copyright (c) 2017 PaddlePaddle Authors. All Rights Reserve.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
IF
(
NOT
${
WITH_MKLDNN
}
)
return
()
ENDIF
(
NOT
${
WITH_MKLDNN
}
)
INCLUDE
(
ExternalProject
)
SET
(
MKLDNN_PROJECT
"extern_mkldnn"
)
SET
(
MKLDNN_SOURCES_DIR
${
THIRD_PARTY_PATH
}
/mkldnn
)
SET
(
MKLDNN_INSTALL_DIR
${
THIRD_PARTY_PATH
}
/install/mkldnn
)
SET
(
MKLDNN_INCLUDE_DIR
"
${
MKLDNN_INSTALL_DIR
}
/include"
CACHE PATH
"mkldnn include directory."
FORCE
)
# The following magic numbers should be updated regularly to keep latest version
SET
(
MKLDNN_TAG
"v0.9"
)
SET
(
MKLDNN_MKL_VER
"mklml_lnx_2018.0.20170425"
)
IF
(
WIN32
)
MESSAGE
(
WARNING
"It is not supported compiling with mkldnn in windows Paddle yet."
"Force WITH_MKLDNN=OFF"
)
SET
(
WITH_MKLDNN OFF
)
return
()
ELSE
(
WIN32
)
SET
(
MKLDNN_LIBRARY
"
${
MKLDNN_INSTALL_DIR
}
/lib/libmkldnn.so"
CACHE FILEPATH
"mkldnn library."
FORCE
)
MESSAGE
(
STATUS
"Set
${
MKLDNN_INSTALL_DIR
}
/lib to runtime path"
)
SET
(
CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE
)
#SET(CMAKE_MACOSX_RPATH 1) # hold for MacOS
SET
(
CMAKE_INSTALL_RPATH
"
${
CMAKE_INSTALL_RPATH
}
"
"
${
MKLDNN_INSTALL_DIR
}
/lib"
)
ENDIF
(
WIN32
)
INCLUDE_DIRECTORIES
(
${
MKLDNN_INCLUDE_DIR
}
)
SET
(
MKLDNN_CMAKE_C_FLAGS
"
${
CMAKE_C_FLAGS
}
${
OpenMP_C_FLAGS
}
"
)
SET
(
MKLDNN_CMAKE_CXX_FLAGS
"
${
CMAKE_CXX_FLAGS
}
${
OpenMP_CXX_FLAGS
}
"
)
ExternalProject_Add
(
${
MKLDNN_PROJECT
}
${
EXTERNAL_PROJECT_LOG_ARGS
}
GIT_REPOSITORY
"https://github.com/01org/mkl-dnn.git"
GIT_TAG
"
${
MKLDNN_TAG
}
"
PREFIX
${
MKLDNN_SOURCES_DIR
}
PATCH_COMMAND cd <SOURCE_DIR>/scripts && ./prepare_mkl.sh
UPDATE_COMMAND
""
CMAKE_ARGS -DCMAKE_CXX_COMPILER=
${
CMAKE_CXX_COMPILER
}
CMAKE_ARGS -DCMAKE_C_COMPILER=
${
CMAKE_C_COMPILER
}
CMAKE_ARGS -DCMAKE_CXX_FLAGS=
${
MKLDNN_CMAKE_CXX_FLAGS
}
CMAKE_ARGS -DCMAKE_C_FLAGS=
${
MKLDNN_CMAKE_C_FLAGS
}
CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=
${
MKLDNN_INSTALL_DIR
}
CMAKE_ARGS -DCMAKE_INSTALL_LIBDIR=
${
MKLDNN_INSTALL_DIR
}
/lib
CMAKE_ARGS -DCMAKE_BUILD_TYPE=Release
CMAKE_CACHE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=
${
MKLDNN_INSTALL_DIR
}
-DCMAKE_INSTALL_LIBDIR:PATH=
${
MKLDNN_INSTALL_DIR
}
/lib
-DCMAKE_BUILD_TYPE:STRING=Release
)
SET
(
MKL_LITE_DIR
${
MKLDNN_SOURCES_DIR
}
/src/
${
MKLDNN_PROJECT
}
/external/
${
MKLDNN_MKL_VER
}
)
SET
(
MKL_LITE_INC_DIR
${
MKL_LITE_DIR
}
/include
)
SET
(
MKL_LITE_LIB
${
MKL_LITE_DIR
}
/lib/libmklml_intel.so
)
SET
(
MKL_LITE_LIB_IOMP
${
MKL_LITE_DIR
}
/lib/libiomp5.so
)
SET
(
CMAKE_INSTALL_RPATH
"
${
CMAKE_INSTALL_RPATH
}
"
"
${
MKL_LITE_DIR
}
/lib"
)
ADD_LIBRARY
(
mkldnn STATIC IMPORTED GLOBAL
)
SET_PROPERTY
(
TARGET mkldnn PROPERTY IMPORTED_LOCATION
${
MKLDNN_LIBRARY
}
)
ADD_DEPENDENCIES
(
mkldnn
${
MKLDNN_PROJECT
}
)
LIST
(
APPEND external_project_dependencies mkldnn
)
paddle/math/MathFunctions.cpp
浏览文件 @
89a41580
...
...
@@ -202,7 +202,7 @@ double dotProduct<double>(const int n, const double* x, const double* y) {
return
cblas_ddot
(
n
,
x
,
1
,
y
,
1
);
}
#if
def PADDLE_USE_MKL
#if
defined(PADDLE_USE_MKL) || defined(PADDLE_USE_MKL_LITE)
template
<
>
void
vExp
<
float
>
(
const
int
n
,
const
float
*
a
,
float
*
r
)
{
...
...
@@ -243,7 +243,55 @@ template <>
void
vAdd
<
double
>
(
const
int
n
,
const
double
*
a
,
const
double
*
b
,
double
*
r
)
{
vdAdd
(
n
,
a
,
b
,
r
);
}
#else
DEFINE_MATRIX_BINARY_OP
(
vExp
,
b
=
std
::
exp
(
a
));
template
<
class
T
>
void
vExp
(
const
int
n
,
const
T
*
a
,
T
*
r
)
{
hl_cpu_apply_binary_op
<
T
,
binary
::
vExp
<
T
>
,
0
,
0
>
(
binary
::
vExp
<
T
>
(),
const_cast
<
T
*>
(
a
),
r
,
1
,
n
,
n
,
n
);
}
DEFINE_MATRIX_BINARY_OP
(
vLog
,
b
=
std
::
log
(
a
));
template
<
class
T
>
void
vLog
(
const
int
n
,
const
T
*
a
,
T
*
r
)
{
hl_cpu_apply_binary_op
<
T
,
binary
::
vLog
<
T
>
,
0
,
0
>
(
binary
::
vLog
<
T
>
(),
const_cast
<
T
*>
(
a
),
r
,
1
,
n
,
n
,
n
);
}
DEFINE_MATRIX_BINARY_PARAMETER_OP
(
vPow
,
ONE_PARAMETER
,
b
=
std
::
pow
(
a
,
p
));
template
<
class
T
>
void
vPow
(
const
int
n
,
const
T
*
a
,
const
T
b
,
T
*
r
)
{
hl_cpu_apply_binary_op
<
T
,
binary
::
vPow
<
T
>
,
0
,
0
>
(
binary
::
vPow
<
T
>
(
b
),
const_cast
<
T
*>
(
a
),
r
,
1
,
n
,
n
,
n
);
}
DEFINE_MATRIX_TERNARY_OP
(
vAdd
,
c
=
a
+
b
);
template
<
class
T
>
void
vAdd
(
const
int
n
,
const
T
*
a
,
const
T
*
b
,
T
*
r
)
{
hl_cpu_apply_ternary_op
<
T
,
ternary
::
vAdd
<
T
>
,
0
,
0
>
(
ternary
::
vAdd
<
T
>
(),
const_cast
<
T
*>
(
a
),
const_cast
<
T
*>
(
b
),
r
,
1
,
n
,
n
,
n
,
n
);
}
template
void
vExp
(
const
int
n
,
const
float
*
a
,
float
*
r
);
template
void
vExp
(
const
int
n
,
const
double
*
a
,
double
*
r
);
template
void
vLog
(
const
int
n
,
const
float
*
a
,
float
*
r
);
template
void
vLog
(
const
int
n
,
const
double
*
a
,
double
*
r
);
template
void
vPow
(
const
int
n
,
const
float
*
a
,
const
float
b
,
float
*
r
);
template
void
vPow
(
const
int
n
,
const
double
*
a
,
const
double
b
,
double
*
r
);
template
void
vAdd
(
const
int
n
,
const
float
*
a
,
const
float
*
b
,
float
*
r
);
template
void
vAdd
(
const
int
n
,
const
double
*
a
,
const
double
*
b
,
double
*
r
);
#endif
#ifdef PADDLE_USE_MKL
template
<
>
void
vInvSqrt
<
float
>
(
const
int
n
,
const
float
*
a
,
float
*
r
)
{
vsInvSqrt
(
n
,
a
,
r
);
...
...
@@ -275,20 +323,6 @@ void vTanh<double>(const int n, const double* a, double* r) {
}
#else
DEFINE_MATRIX_BINARY_OP
(
vExp
,
b
=
std
::
exp
(
a
));
template
<
class
T
>
void
vExp
(
const
int
n
,
const
T
*
a
,
T
*
r
)
{
hl_cpu_apply_binary_op
<
T
,
binary
::
vExp
<
T
>
,
0
,
0
>
(
binary
::
vExp
<
T
>
(),
const_cast
<
T
*>
(
a
),
r
,
1
,
n
,
n
,
n
);
}
DEFINE_MATRIX_BINARY_OP
(
vLog
,
b
=
std
::
log
(
a
));
template
<
class
T
>
void
vLog
(
const
int
n
,
const
T
*
a
,
T
*
r
)
{
hl_cpu_apply_binary_op
<
T
,
binary
::
vLog
<
T
>
,
0
,
0
>
(
binary
::
vLog
<
T
>
(),
const_cast
<
T
*>
(
a
),
r
,
1
,
n
,
n
,
n
);
}
DEFINE_MATRIX_BINARY_OP
(
vInvSqrt
,
b
=
1.0
f
/
std
::
sqrt
(
a
));
template
<
class
T
>
void
vInvSqrt
(
const
int
n
,
const
T
*
a
,
T
*
r
)
{
...
...
@@ -312,41 +346,12 @@ void vTanh(const int n, const T* a, T* r) {
binary
::
vTanh
<
T
>
(),
const_cast
<
T
*>
(
a
),
r
,
1
,
n
,
n
,
n
);
}
DEFINE_MATRIX_BINARY_PARAMETER_OP
(
vPow
,
ONE_PARAMETER
,
b
=
std
::
pow
(
a
,
p
));
template
<
class
T
>
void
vPow
(
const
int
n
,
const
T
*
a
,
const
T
b
,
T
*
r
)
{
hl_cpu_apply_binary_op
<
T
,
binary
::
vPow
<
T
>
,
0
,
0
>
(
binary
::
vPow
<
T
>
(
b
),
const_cast
<
T
*>
(
a
),
r
,
1
,
n
,
n
,
n
);
}
DEFINE_MATRIX_TERNARY_OP
(
vAdd
,
c
=
a
+
b
);
template
<
class
T
>
void
vAdd
(
const
int
n
,
const
T
*
a
,
const
T
*
b
,
T
*
r
)
{
hl_cpu_apply_ternary_op
<
T
,
ternary
::
vAdd
<
T
>
,
0
,
0
>
(
ternary
::
vAdd
<
T
>
(),
const_cast
<
T
*>
(
a
),
const_cast
<
T
*>
(
b
),
r
,
1
,
n
,
n
,
n
,
n
);
}
template
void
vExp
(
const
int
n
,
const
float
*
a
,
float
*
r
);
template
void
vExp
(
const
int
n
,
const
double
*
a
,
double
*
r
);
template
void
vLog
(
const
int
n
,
const
float
*
a
,
float
*
r
);
template
void
vLog
(
const
int
n
,
const
double
*
a
,
double
*
r
);
template
void
vInvSqrt
(
const
int
n
,
const
double
*
a
,
double
*
r
);
template
void
vInvSqrt
(
const
int
n
,
const
float
*
a
,
float
*
r
);
template
void
vLog1p
(
const
int
n
,
const
float
*
a
,
float
*
r
);
template
void
vLog1p
(
const
int
n
,
const
double
*
a
,
double
*
r
);
template
void
vTanh
(
const
int
n
,
const
float
*
a
,
float
*
r
);
template
void
vTanh
(
const
int
n
,
const
double
*
a
,
double
*
r
);
template
void
vPow
(
const
int
n
,
const
float
*
a
,
const
float
b
,
float
*
r
);
template
void
vPow
(
const
int
n
,
const
double
*
a
,
const
double
b
,
double
*
r
);
template
void
vAdd
(
const
int
n
,
const
float
*
a
,
const
float
*
b
,
float
*
r
);
template
void
vAdd
(
const
int
n
,
const
double
*
a
,
const
double
*
b
,
double
*
r
);
#endif
...
...
paddle/math/MathFunctions.h
浏览文件 @
89a41580
...
...
@@ -15,6 +15,12 @@ limitations under the License. */
#ifndef MATHFUNCTIONS_H_
#define MATHFUNCTIONS_H_
#ifdef PADDLE_USE_MKL_LITE
#include <mkl_cblas.h>
#include <mkl_lapacke.h>
#include <mkl_vml_functions.h>
#endif
#ifdef PADDLE_USE_MKL
#include <mkl.h>
#include <mkl_lapacke.h>
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录