Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
urhero
Paddle
提交
e1288616
P
Paddle
项目概览
urhero
/
Paddle
与 Fork 源项目一致
Fork自
PaddlePaddle / Paddle
通知
1
Star
0
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看板
体验新版 GitCode,发现更多精彩内容 >>
提交
e1288616
编写于
4月 20, 2017
作者:
H
hedaoyuan
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Fix compile on raspberry pi
上级
6d6804f1
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
52 addition
and
6 deletion
+52
-6
doc/howto/raspberry/build_for_raspberry.md
doc/howto/raspberry/build_for_raspberry.md
+45
-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
浏览文件 @
e1288616
# 如何构建raspberry pi下运行的paddle
这里考虑的是交叉编译方式,即在Linux-X86环境下构建raspberry pi下可运行的paddle。
## 下载较差编译环境
```
git clone https://github.com/raspberrypi/tools
```
如果host是x86-64环境,选用
`arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64`
下的作为编译工具。注意,需要系统glibc支持2.14以上。
## 编译第三方库
Paddle在cmake会在编译paddle的时候自动编译依赖的第三方库,不过openblas和protobuf最好还是在编译paddle之前先编译好,这样可以保证编译paddle的时候更加顺畅。
### 编译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`
。
## 编译Paddle
```
cmake .. -DWITH_GPU=OFF -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
```
paddle/api/CMakeLists.txt
浏览文件 @
e1288616
...
...
@@ -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
(
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
)
SET
(
CMAKE_CXX_FLAGS
"
${
CMAKE_CXX_FLAGS
}
-g -O0 -fprofile-arcs -ftest-coverage"
)
ENDIF
(
WITH_COVERAGE
)
...
...
paddle/utils/CpuId.cpp
浏览文件 @
e1288616
...
...
@@ -19,19 +19,22 @@ limitations under the License. */
/// for MSVC
#define CPUID(info, x) __cpuidex(info, x, 0)
#el
if !defined(__ANDROID__)
#el
se
#if !defined(__arm__)
#include <cpuid.h>
/// for GCC/Clang
#define CPUID(info, x) __cpuid_count(x, 0, info[0], info[1], info[2], info[3])
#endif
#endif
namespace
paddle
{
SIMDFlags
::
SIMDFlags
()
{
#if !defined(__ANDROID__)
#if defined(__arm__)
simd_flags_
=
SIMD_NEON
;
#else
unsigned
int
cpuInfo
[
4
];
// CPUID: https://en.wikipedia.org/wiki/CPUID
// clang-format off
...
...
@@ -52,8 +55,6 @@ SIMDFlags::SIMDFlags() {
CPUID
(
cpuInfo
,
0x80000001
);
simd_flags_
|=
cpuInfo
[
2
]
&
(
1
<<
16
)
?
SIMD_FMA4
:
SIMD_NONE
;
// clang-fotmat on
#else
simd_flags_
=
SIMD_NEON
;
#endif
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录