Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
BaiXuePrincess
Paddle
提交
0fdbd40f
P
Paddle
项目概览
BaiXuePrincess
/
Paddle
与 Fork 源项目一致
Fork自
PaddlePaddle / Paddle
通知
1
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
P
Paddle
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
0fdbd40f
编写于
5月 16, 2017
作者:
Y
Yi Wang
提交者:
GitHub
5月 16, 2017
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #1835 from hedaoyuan/raspberrypi
Fix compile on raspberry pi
上级
26c230da
5cdc4955
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
54 addition
and
6 deletion
+54
-6
doc/howto/raspberry/build_for_raspberry.md
doc/howto/raspberry/build_for_raspberry.md
+47
-0
paddle/api/CMakeLists.txt
paddle/api/CMakeLists.txt
+1
-1
paddle/utils/CpuId.cpp
paddle/utils/CpuId.cpp
+6
-5
未找到文件。
doc/howto/raspberry/build_for_raspberry.md
0 → 100644
浏览文件 @
0fdbd40f
# 如何构建Raspberry pi下运行的PaddlePaddle
这里考虑的是交叉编译方式,即在Linux-x86环境下构建Raspberry pi下可运行的PaddlePaddle。
## 下载交叉编译环境
```
git clone https://github.com/raspberrypi/tools
```
如果host是x86-64环境,选用
`arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64`
下的作为编译工具。注意,需要系统glibc支持2.14以上。
## 编译第三方库
cmake编译PaddlePaddle时候会自动下载编译依赖的第三方库,不过openblas和protobuf最好还是在编译PaddlePaddle之前先编译好,这样可以保证编译PaddlePaddle的时候更加顺畅。
### 编译OpenBLAS
```
git clone https://github.com/xianyi/OpenBLAS.git
make TARGET=ARMV7 HOSTCC=gcc CC=arm-linux-gnueabihf-gcc NOFORTRAN=1 USE_THREAD=0
```
### 编译protobuf
```
git clone https://github.com/google/protobuf.git
git checkout 9f75c5aa851cd877fb0d93ccc31b8567a6706546
cmake ../protobuf/cmake \
-Dprotobuf_BUILD_TESTS=OFF \
-DCMAKE_CXX_COMPILER=arm-linux-gnueabihf-g++ \
-DCMAKE_C_COMPILER=arm-linux-gnueabihf-gcc \
-DCMAKE_POSITION_INDEPENDENT_CODE=ON \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_LIBDIR=lib
```
注意:这样编译出来的
`libprotobuf.a`
和
`protoc`
都是ARM版本的,而我们需要的是一个x86-64版本的
`protoc`
,所以需要用host gcc再编译一遍protobuf然后使用其中的
`protoc`
。
## 编译PaddlePaddle
cmake参数如下;其中
`WITH_C_API`
设置为ON,编译输出的output目录会中包含
`include`
和
`lib`
目录,其中
`include`
中包含CAPI的头文件,
`lib`
中包含一个ARM版本的库。另外,
`CMAKE_BUILD_TYPE`
设置为
`MinSizeRel`
可以减小编译的库的大小。
```
cmake .. -DWITH_GPU=OFF -DWITH_C_API=ON -DWITH_PYTHON=OFF -DWITH_SWIG_PY=OFF \
-DCMAKE_CXX_COMPILER:FILEPATH=arm-linux-gnueabihf-g++ \
-DCMAKE_C_COMPILER:FILEPATH=arm-linux-gnueabihf-gcc \
-DCMAKE_C_FLAGS="-mfpu=neon" \
-DCMAKE_CXX_FLAGS="-mfpu=neon" \
-DOPENBLAS_ROOT=openblas \
-DCMAKE_PREFIX_PATH=protobuf \
-DCMAKE_BUILD_TYPE=MinSizeRel
```
paddle/api/CMakeLists.txt
浏览文件 @
0fdbd40f
...
@@ -26,7 +26,7 @@ FILE(GLOB PY_PADDLE_PYTHON_FILES ${PROJ_ROOT}/paddle/py_paddle/*.py)
...
@@ -26,7 +26,7 @@ FILE(GLOB PY_PADDLE_PYTHON_FILES ${PROJ_ROOT}/paddle/py_paddle/*.py)
SET_SOURCE_FILES_PROPERTIES
(
Paddle.i PROPERTIES CPLUSPLUS ON
)
SET_SOURCE_FILES_PROPERTIES
(
Paddle.i PROPERTIES CPLUSPLUS ON
)
SET
(
CMAKE_SWIG_OUTDIR
${
CMAKE_CURRENT_BINARY_DIR
}
)
SET
(
CMAKE_SWIG_OUTDIR
${
CMAKE_CURRENT_BINARY_DIR
}
)
SET
(
CMAKE_CXX_FLAGS
"-std=c++11 -fPIC -Wall"
)
SET
(
CMAKE_CXX_FLAGS
"
${
CMAKE_CXX_FLAGS
}
-std=c++11 -fPIC -Wall"
)
IF
(
WITH_COVERAGE
)
IF
(
WITH_COVERAGE
)
SET
(
CMAKE_CXX_FLAGS
"
${
CMAKE_CXX_FLAGS
}
-g -O0 -fprofile-arcs -ftest-coverage"
)
SET
(
CMAKE_CXX_FLAGS
"
${
CMAKE_CXX_FLAGS
}
-g -O0 -fprofile-arcs -ftest-coverage"
)
ENDIF
(
WITH_COVERAGE
)
ENDIF
(
WITH_COVERAGE
)
...
...
paddle/utils/CpuId.cpp
浏览文件 @
0fdbd40f
...
@@ -19,19 +19,22 @@ limitations under the License. */
...
@@ -19,19 +19,22 @@ limitations under the License. */
/// for MSVC
/// for MSVC
#define CPUID(info, x) __cpuidex(info, x, 0)
#define CPUID(info, x) __cpuidex(info, x, 0)
#el
if !defined(__ANDROID__)
#el
se
#if !defined(__arm__)
#include <cpuid.h>
#include <cpuid.h>
/// for GCC/Clang
/// for GCC/Clang
#define CPUID(info, x) __cpuid_count(x, 0, info[0], info[1], info[2], info[3])
#define CPUID(info, x) __cpuid_count(x, 0, info[0], info[1], info[2], info[3])
#endif
#endif
#endif
namespace
paddle
{
namespace
paddle
{
SIMDFlags
::
SIMDFlags
()
{
SIMDFlags
::
SIMDFlags
()
{
#if !defined(__ANDROID__)
#if defined(__arm__)
simd_flags_
=
SIMD_NEON
;
#else
unsigned
int
cpuInfo
[
4
];
unsigned
int
cpuInfo
[
4
];
// CPUID: https://en.wikipedia.org/wiki/CPUID
// CPUID: https://en.wikipedia.org/wiki/CPUID
// clang-format off
// clang-format off
...
@@ -52,8 +55,6 @@ SIMDFlags::SIMDFlags() {
...
@@ -52,8 +55,6 @@ SIMDFlags::SIMDFlags() {
CPUID
(
cpuInfo
,
0x80000001
);
CPUID
(
cpuInfo
,
0x80000001
);
simd_flags_
|=
cpuInfo
[
2
]
&
(
1
<<
16
)
?
SIMD_FMA4
:
SIMD_NONE
;
simd_flags_
|=
cpuInfo
[
2
]
&
(
1
<<
16
)
?
SIMD_FMA4
:
SIMD_NONE
;
// clang-fotmat on
// clang-fotmat on
#else
simd_flags_
=
SIMD_NEON
;
#endif
#endif
}
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录