Caffe 使用OpenBLAS CPU多线程加速

2018-04-27  本文已影响747人  jhttroy

编译OpenBLAS

OpenBLAS编译可以参照官网:https://github.com/xianyi/OpenBLAS
需要注意的是编译时需加入USE_OPENMP=1 选项使用OpenMP 编译,不然caffe的并行化执行效率会受很大影响,我的系统而言,不使用OpenMP的话在4线程下运行mnist示例已经如便秘一般,比单核慢很多。而使能了OpenMP之后情况好转不少,后面会贴出不同线程数的运行时间。

$ make USE_OPENMP=1
$ sudo make install PREFIX=/opt/OpenBLAS.OpenMP  #默认是/opt/OpenBLAS.

编译Caffe

编译caffe需要注意以下几点,更改Makefile.config:

CPU_ONLY := 1
BLAS := open
BLAS_INCLUDE := /opt/OpenBLAS.OpenMP/include
BLAS_LIB := /opt/OpenBLAS.OpenMP/lib

编译环境设置

export LD_LIBRARY_PATH=/opt/OpenBLAS.OpenMP/lib:/usr/local/lib:/usr/local/lib64:/usr/lib:/usr/lib64:/lib64
export LIBRARY_DIRS=$LD_LIBRARY_PATH
export INCLUDE=/opt/OpenBLAS.OpenMP/include:/usr/include:/usr/include/gflags
export INCLUDE_DIRS=$INCLUDE

多线程优化结果

使用OpenMP的情况下,多核下性能会有些提升,太多的话效率反而会降低。我使用mnist 的examples/mnist/train_lenet.sh 进行测试,为使用CPU计算和减少等待,做了如下改动:

# edit examples/mnist/lenet_solver.prototxt
max_iter: 1000
snapshot: 500
solver_mode: CPU

在使能OpenMP编译OpenBLAS之后,运行时使用多线程需要用下面这个环境变量指定:

export OMP_NUM_THREADS=4

下面是不同线程数的测试结果。

线程数 运行时间(s) - OpenMP 运行时间(s) - No OpenMP
1 89 89
2 66 72
4 52 420
8 49
16 51
32 77,error log: double free or corruption
上一篇 下一篇

猜你喜欢

热点阅读