主要问题(#1):
有没有什么秘诀可以让 anaconda R (请不要使用其他 R,其他 R 没有问题)在 Ubuntu 上使用常驻 BLAS 子系统?
根据环境变量 OMP_NUM_THREADS 的值,同一主机上的其他数值应用程序 (Octave) 正在证明 BLAS 子系统安装是有效的,并且对于数值矩阵运算具有预期的高性能。将这个非 anaconda 软件挂接到驻留的 BLAS 子系统中不需要特殊技巧。
相关问题(#2):英特尔 MKL
BLAS 子系统
是否与 anaconda 一起分发,并且可以被 anaconda R 使用,作为 OpenBLAS 的后备?在这种情况下,如何激活 MKL BLAS?
程序htop
在基准运行期间仅由 Anaconda R 显示单核 100% 利用率。出乎意料的是,Anaconda R 无法使用 OpenBLAS 进行并行矩阵代码。与使用普通 R 而不是 anaconda R 的参考机器相比,观察到 > 40 倍的显着减速。这是一个不可接受的性能问题。
blas 子系统安装本身使用 GNU Octave 包通过运行数值基准验证为正确且功能齐全,当OMP_NUM_THREADS=1
更改为时显示出预期的出色改进OMP_NUM_THREADS=16
,这对于测试硬件来说是适当的值。
最后一个问题(#3):
anaconda 维护者供应商是否有意构建仅用于英特尔 MKL的 R 二进制文件,不包括 OpenBLAS 子系统?
谢谢阅读。
请求任何回复仅限于具有实际使用 MKS 或 OpenBLAS 并仅通过 anaconda 软件包成功使用经验的人。感谢您的理解。
随意使用我的基准:
# Plain old R, OpenBLAS, OMP_NUM_THREADS=4, Intel Core i7-920, 4 HW cores:
n=5e3
print(system.time({ x <- replicate(n, rnorm(n)); tcrossprod(x) }))
# elapsed: 6.1
# Anaconda R, OpenBLAS, OMP_NUM_THREADS=16, 2 x Intel Xeon-2690, 16 HW cores:
n=5e3
print(system.time({ x <- replicate(n, rnorm(n)); tcrossprod(x) }))
# elapsed: 291.8
GNU Octave benchmarks on same machine 2 x Intel Xeon-2690:
**Note GNU Octave is outside of anaconda**
ga@ga-HP-Z820:~/projects/blas_bench$ bash octave_benchmark.sh
Run program in octave using NVBLAS GPU-parallel algebra code, not CPU. LD_PRELOAD=libnvblas.so:
[NVBLAS] NVBLAS_CONFIG_FILE environment variable is set to 'nvblas.conf'
[NVBLAS] NVBLAS_CONFIG_FILE environment variable is set to 'nvblas.conf'
Elapsed time:
0.012405
Gigaflops:
7.0905e+05
Run program in octave using OpenBLAS CPU-parallel algebra code. OMP_NUM_THREADS=16 LD_PRELOAD=libblas.so.3:
Elapsed time:
17.559
Gigaflops:
500.95
Same but without LD_PRELOAD=libblas.so.3, does it still really run fast, indicating OpenBLAS is still used? OMP_NUM_THREADS=16:
Elapsed time:
16.063
Gigaflops:
547.61
Run program in almost plain old octave: This might still use OpenBLAS since its default ON on this host. Setting OMP_NUM_THREADS=1 so its nearly stock.
Elapsed time:
233.34
Gigaflops:
37.696
(遗憾的是,由于 NVIDIA 专有视频驱动程序安装在某些时候被 Ubuntu 自动更新损坏,请忽略未完成测试的 NVBLAS。)