我通过关于这些指南来编译R:
http://www.r-bloggers.com/compiling-64-bit-r-2-10-1-with-mkl-in-linux/
http://cran.r-project.org/doc/manuals/R-admin.html#MKL
但是对于矩阵代数,R不使用所有可用的CPU。
我试过了两个:
MKL="-L${MKL_LIB_PATH} -lmkl_gf_lp64 -lmkl_gnu_thread \
-lmkl_core -fopenmp -lpthread"
和
MKL=" -L${MKL_LIB_PATH} \
-Wl,--start-group \
${MKL_LIB_PATH}/libmkl_gf_lp64.a \
${MKL_LIB_PATH}/libmkl_gnu_thread.a \
${MKL_LIB_PATH}/libmkl_core.a \
-Wl,--end-group \
-lgomp -lpthread"
选项。
如何强制R使用所有可用的CPU?
如何检查R是否使用MKL?
答案 0 :(得分:6)
我想添加我的程序来编译带有MKL库的 R 3.0.1 。我在核心i7 intel处理器,8G RAM上使用Debian 7.0。首先我用这个命令设置MKL相关的环境变量(MKLROOT和LD_LIBRARY_PATH)之后安装了MKL库:
>source /opt/intel/mkl/bin/mklvars.sh intel64
所以我使用以下参数来./configure:
>./configure --enable-R-shlib --enable-threads=posix --with-lapack --with-blas="-fopenmp -m64 -I$MKLROOT/include -L$MKLROOT/lib/intel64 -lmkl_gf_lp64 -lmkl_gnu_thread -lmkl_core -lpthread -lm"
并使用make和make install完成安装。
作为基准,我在没有MKL的两个5000 x 5000矩阵产品之间做了一个产品,得到了:
用户系统已用完 57.455 0.104 29.033
编译后:
用户系统已用完 15.993 0.176 4.333
真正的收获!
答案 1 :(得分:2)
所有这一切现在变得更加容易 - 简短blog post is here详细讨论以下步骤。
但简而言之,您只需要:
## get archive key
cd /tmp
wget https://apt.repos.intel.com/intel-gpg-keys/GPG-PUB-KEY-INTEL-SW-PRODUCTS-2019.PUB
apt-key add GPG-PUB-KEY-INTEL-SW-PRODUCTS-2019.PUB
## add MKL to apt's repo list
sh -c 'echo deb https://apt.repos.intel.com/mkl all main > /etc/apt/sources.list.d/intel-mkl.list'
## update and install (500+ mb download, 1.9gb installed)
apt-get update
apt-get install intel-mkl-64bit-2018.2-046
## make it system default via update alternatives
update-alternatives --install /usr/lib/x86_64-linux-gnu/libblas.so libblas.so-x86_64-linux-gnu /opt/intel/mkl/lib/intel64/libmkl_rt.so 50
update-alternatives --install /usr/lib/x86_64-linux-gnu/libblas.so.3 libblas.so.3-x86_64-linux-gnu /opt/intel/mkl/lib/intel64/libmkl_rt.so 50
update-alternatives --install /usr/lib/x86_64-linux-gnu/liblapack.so liblapack.so-x86_64-linux-gnu /opt/intel/mkl/lib/intel64/libmkl_rt.so 50
update-alternatives --install /usr/lib/x86_64-linux-gnu/liblapack.so.3 liblapack.so.3-x86_64-linux-gnu /opt/intel/mkl/lib/intel64/libmkl_rt.so 50
## tell ldconfig
echo "/opt/intel/lib/intel64" > /etc/ld.so.conf.d/mkl.conf
echo "/opt/intel/mkl/lib/intel64" >> /etc/ld.so.conf.d/mkl.conf
ldconfig
就是这样。没有其他的。不重新编译或链接。例如,R现在显示在sessionInfo()
:
Matrix products: default
BLAS/LAPACK: /opt/intel/compilers_and_libraries_2018.2.199/linux/mkl/lib/intel64_lin/libmkl_rt.so
答案 2 :(得分:1)
(不是真正的答案:我不使用MKL,我使用OpenBlas作为shared BLAS as described in the R-admin manual。)
快速检查是否使用了优化的BLAS,我进行矩阵乘法。即使只使用了1个核心,优化的BLAS也应该比标准的BLAS R更快。
要检查正在使用的核心数,我会在矩阵乘法期间查看top
(或CPU使用率图表/监视器)。
过去一直存在CPU亲和性问题,因此BLAS会启动$ n $个线程,但它们都运行在同一个核心上,请参阅Parallel processing in R limited。 r-devel(3.0.0-to-be)具有设置CPU亲和力的功能。
答案 3 :(得分:0)