用R配置MKL
我在使用MKL库触发R线程时遇到问题。我目前正在使用Ubuntu 18.04.2 LTS用R配置MKL,r,multithreading,compilation,multiprocessing,intel-mkl,R,Multithreading,Compilation,Multiprocessing,Intel Mkl,我在使用MKL库触发R线程时遇到问题。我目前正在使用Ubuntu 18.04.2 LTS Linux pedro-HP-EliteOne-800-G1-AiO 4.18.0-15-generic #16~18.04.1-Ubuntu SMP Thu Feb 7 14:06:04 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux r-open$ screenfetch ./+o+- pedro@ped
Linux pedro-HP-EliteOne-800-G1-AiO 4.18.0-15-generic #16~18.04.1-Ubuntu SMP Thu Feb 7 14:06:04 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
r-open$ screenfetch
./+o+- pedro@pedro-HP-EliteOne-800-G1-AiO
yyyyy- -yyyyyy+ OS: Ubuntu 18.04 bionic
://+//////-yyyyyyo Kernel: x86_64 Linux 4.18.0-15-generic
.++ .:/++++++/-.+sss/` Uptime: 19h 27m
.:++o: /++++++++/:--:/- Packages: 1834
o:+o+:++.`..```.-/oo+++++/ Shell: bash
.:+o:+o/. `+sssoo+/ Resolution: 1920x1080
.++/+:+oo+o:` /sssooo. DE: GNOME
/+++//+:`oo+o /::--:. WM: GNOME Shell
\+/+o+++`o++o ++////. WM Theme: Adwaita
.++.o+++oo+:` /dddhhh. GTK Theme: Ambiance [GTK2/3]
.+.o+oo:. `oddhhhh+ Icon Theme: ubuntu-mono-dark
\+.++o+o``-````.:ohdhhhhh+ Font: Ubuntu 11
`:o+++ `ohhhhhhhhyo++os: CPU: Intel Core i5-4590S @ 4x 3.7GHz [27.8°C]
.o:`.syhhhhhhh/.oo++o` GPU: intel
/osyyyyyyo++ooo+++/ RAM: 2659MiB / 7867MiB
````` +oo+++o\:
`oo++.
注意:我的机器有4个内核
最初,我在英特尔网站上下载了文件l_mkl_2019.2.187.tgz,并安装了/home/pedro/
。后来,我下载了R-3.5.2.tar.gz
文件,用多线程MKL支持编译R。我通过以下方式执行编译:
source /home/pedro/intel/mkl/bin/mklvars.sh intel64
cd /home/pedro/Downloads/R-3.5.2 && ./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
显然,汇编工作没有出现任何问题。使用sessionInfo()
命令,我得到了以下结果:
> sessionInfo()
R version 3.5.2 (2018-12-20)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Ubuntu 18.04.2 LTS
Matrix products: default
BLAS/LAPACK: /home/pedro/intel/compilers_and_libraries_2019.2.187/linux/mkl/lib/intel64_lin/libmkl_gf_lp64.so
locale:
[1] LC_CTYPE=pt_BR.UTF-8 LC_NUMERIC=C
[3] LC_TIME=pt_BR.UTF-8 LC_COLLATE=pt_BR.UTF-8
[5] LC_MONETARY=pt_BR.UTF-8 LC_MESSAGES=pt_BR.UTF-8
[7] LC_PAPER=pt_BR.UTF-8 LC_NAME=C
[9] LC_ADDRESS=C LC_TELEPHONE=C
[11] LC_MEASUREMENT=pt_BR.UTF-8 LC_IDENTIFICATION=C
attached base packages:
[1] stats graphics grDevices utils datasets methods base
loaded via a namespace (and not attached):
[1] compiler_3.5.2
基本上,我正在尝试使用parallel::mclappy
函数并行化蒙特卡罗模拟。事实上,使用MKL串行(1核)我有更好的结果,但是当尝试并行化时,我意识到线程不是在4核中触发的
我使用函数parallel::mclappy
所做的是:
parallel::mclappy(1:8,FUN=function(x)func_metodos(),mc.cores=4))
,其中func_metodos()
是我在R中实现的一个函数,希望重复8次
注意:我想要一个解决方案,而不是使用Microsoft R Open。我不喜欢使用微软的东西
致以最诚挚的问候。我在第二章中详细介绍了这一点
- 在
- 基于中的脚本
正如我在那里演示的那样,这可以完全自动化。我可以添加更多颜色,但我现在要运行…您可以并行运行帮助页面中的示例吗?是的,我可以并行运行程序包中的示例。然而,显然线程并没有被分配到多个核心。我通过查看Gnome CPU历史记录工具来说明这一点。无论R是否使用MKL,我相信并行包示例都可以工作,但是,只使用一个内核。好的,我完成了中的步骤。我以前没有做过echo“MKL\u THREADING\u LAYER=GNU”>>/etc/environment。然而,在我的模拟中,我使用BLAS+Lapack大大缩短了模拟时间,而使用MKL则使模拟变得更糟。这让我相信有些事情仍然不对劲。然而,在我的上一次测试中,它并没有编译R。我只是使用apt-get-install R-base安装了它。也许就是这样。我将测试编译R。不,这是一个误解。您不需要为此重新编译R。很高兴知道,没有必要编译R以获得完美的MKL支持。我会尽力找出可能发生的事情。我知道有些问题并行可能不是一个好的解决方案。然而,我坚信情况并非如此,因为使用Blas+Lapack,我的并行性能提高了近50%。很可能是使用“英特尔MKL”库观察到了类似的情况。我很惊讶地看到情况恶化。在我看来,使用
MKL\u THREADING\u LAYER=GNU
会导致MKL使用GNU OpenMP,不知何故,我无法解释为什么比使用Blas、Atlas或OpenBlas慢。我尝试过改变MKL的版本,但也没有成功。在我写博客的时候,我做了一些实验,我确实看到MKL在OpenBLAS中占据主导地位,但没有太多。但我写的,并致力于GitHub,是通用的,并为许多人工作过。我不知道你的设置可能有什么不同,但很可能是这样。