Caffe 使用OpenBLAS CPU多线程加速

编译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
CPU_ONLY := 1
  • BLAS
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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。