我只是
numpy在一个
virtualenv带有
OpenBLAS集成的内部进行编译,看来工作正常。
这是我的过程:
- 编译
OpenBLAS
:$ git clone https://github.com/xianyi/OpenBLAS
$ cd OpenBLAS && make FC=gfortran
$ sudo make PREFIX=/opt/OpenBLAS install
如果您没有管理员权限,则可以将其设置
PREFIX=为具有写权限的目录(只需相应地修改下面的相应步骤)。
确保包含目录
libopenblas.so
位于共享库搜索路径中。- 要在本地执行此 *** 作,您可以编辑
~/.bashrc
文件以包含该行export LD_LIBRARY_PATH=/opt/OpenBLAS/lib:$LD_LIBRARY_PATH
- 要在本地执行此 *** 作,您可以编辑
LD_LIBRARY_PATH当启动新的终端会话时,环境变量将被更新(用于
$ source ~/.bashrc在同一会话中强制进行更新)。
* 适用于多个用户的另一个选项是`.conf`在`/etc/ld.so.conf.d/`包含该行的位置创建一个文件`/opt/OpenBLAS/lib`,例如: $ sudo sh -c "echo '/opt/OpenBLAS/lib' > /etc/ld.so.conf.d/openblas.conf"
完成任一选项后,运行
$ sudo ldconfig
抓取
numpy
源代码:$ git clone https://github.com/numpy/numpy
$ cd numpy
复制
site.cfg.example
到site.cfg
并编辑副本:$ cp site.cfg.example site.cfg
$ nano site.cfg
取消注释以下行:
....[openblas]libraries = openblaslibrary_dirs = /opt/OpenBLAS/libinclude_dirs = /opt/OpenBLAS/include....
- 检查配置,构建,安装(可选在
virtualenv
)$ python setup.py config
输出应如下所示:
...openblas_info: FOUND: libraries = ['openblas', 'openblas'] library_dirs = ['/opt/OpenBLAS/lib'] language = c define_macros = [('HAVE_CBLAS', None)] FOUND: libraries = ['openblas', 'openblas'] library_dirs = ['/opt/OpenBLAS/lib'] language = c define_macros = [('HAVE_CBLAS', None)]...
与安装
pip是最好用
python setup.pyinstall的,因为
pip将跟踪包的元数据,让你轻松卸载或将来升级numpy的。
$ pip install .
可选:您可以使用此脚本来测试不同线程数的性能。
$ OMP_NUM_THREADS=1 python build/test_numpy.py
version: 1.10.0.dev0+8e026a2
maxint: 9223372036854775807BLAS info:
* libraries [‘openblas’, ‘openblas’]
* library_dirs [‘/opt/OpenBLAS/lib’]
* define_macros [(‘HAVE_CBLAS’, None)]
* language cdot: 0.099796795845 sec
$ OMP_NUM_THREADS=8 python build/test_numpy.py
version: 1.10.0.dev0+8e026a2
maxint: 9223372036854775807BLAS info:
* libraries [‘openblas’, ‘openblas’]
* library_dirs [‘/opt/OpenBLAS/lib’]
* define_macros [(‘HAVE_CBLAS’, None)]
* language cdot: 0.0439578056335 sec
对于更高的线程数,性能似乎有了明显的提高。但是,我尚未对此进行非常系统的测试,对于较小的矩阵,额外的开销可能会超过线程数增多带来的性能好处。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)