使用 R 配置 MKL

Ped*_*ael 5 multithreading r compilation multiprocessing intel-mkl

我在使用MKL库触发R线程时遇到问题。我目前使用的是 Ubuntu 18.04.2 LTS。

\n\n
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\n\nr-open$ screenfetch \n                          ./+o+-       pedro@pedro-HP-EliteOne-800-G1-AiO\n                  yyyyy- -yyyyyy+      OS: Ubuntu 18.04 bionic\n               ://+//////-yyyyyyo      Kernel: x86_64 Linux 4.18.0-15-generic\n           .++ .:/++++++/-.+sss/`      Uptime: 19h 27m\n         .:++o:  /++++++++/:--:/-      Packages: 1834\n        o:+o+:++.`..```.-/oo+++++/     Shell: bash\n       .:+o:+o/.          `+sssoo+/    Resolution: 1920x1080\n  .++/+:+oo+o:`             /sssooo.   DE: GNOME \n /+++//+:`oo+o               /::--:.   WM: GNOME Shell\n \\+/+o+++`o++o               ++////.   WM Theme: Adwaita\n  .++.o+++oo+:`             /dddhhh.   GTK Theme: Ambiance [GTK2/3]\n       .+.o+oo:.          `oddhhhh+    Icon Theme: ubuntu-mono-dark\n        \\+.++o+o``-````.:ohdhhhhh+     Font: Ubuntu 11\n         `:o+++ `ohhhhhhhhyo++os:      CPU: Intel Core i5-4590S @ 4x 3.7GHz [27.8\xc2\xb0C]\n           .o:`.syhhhhhhh/.oo++o`      GPU: intel\n               /osyyyyyyo++ooo+++/     RAM: 2659MiB / 7867MiB\n                   ````` +oo+++o\\:    \n                          `oo++.      \n
Run Code Online (Sandbox Code Playgroud)\n\n

:我的机器有4核

\n\n

最初,我在英特尔网站上下载了文件l_mkl_2019.2.187.tgz并进行了安装/home/pedro/。后来我下载了该R-3.5.2.tar.gz文件来编译具有多线程MKL支持的R。我通过执行以下操作来执行编译:

\n\n
source /home/pedro/intel/mkl/bin/mklvars.sh intel64\ncd /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"\nmake\nmake install\n
Run Code Online (Sandbox Code Playgroud)\n\n

显然编译没有任何问题。使用该sessionInfo()命令我得到以下结果:

\n\n
> sessionInfo()\nR version 3.5.2 (2018-12-20)\nPlatform: x86_64-pc-linux-gnu (64-bit)\nRunning under: Ubuntu 18.04.2 LTS\n\nMatrix products: default\nBLAS/LAPACK: /home/pedro/intel/compilers_and_libraries_2019.2.187/linux/mkl/lib/intel64_lin/libmkl_gf_lp64.so\n\nlocale:\n [1] LC_CTYPE=pt_BR.UTF-8       LC_NUMERIC=C              \n [3] LC_TIME=pt_BR.UTF-8        LC_COLLATE=pt_BR.UTF-8    \n [5] LC_MONETARY=pt_BR.UTF-8    LC_MESSAGES=pt_BR.UTF-8   \n [7] LC_PAPER=pt_BR.UTF-8       LC_NAME=C                 \n [9] LC_ADDRESS=C               LC_TELEPHONE=C            \n[11] LC_MEASUREMENT=pt_BR.UTF-8 LC_IDENTIFICATION=C       \n\nattached base packages:\n[1] stats     graphics  grDevices utils     datasets  methods   base     \n\nloaded via a namespace (and not attached):\n[1] compiler_3.5.2\n
Run Code Online (Sandbox Code Playgroud)\n\n

基本上我正在尝试使用该parallel :: mclapply函数并行化蒙特卡洛模拟。事实上,串行(1 个核心)使用MKL可以获得更好的结果,但在尝试并行化时,我意识到线程不会在 4 个核心中触发。

\n\n

我使用该函数所做的parallel::mclapply是:

\n\n

parallel::mclapply(1:8, FUN = function(x) func_metodos(), mc.cores = 4)),其中是我在Rfunc_metodos()中实现的函数,想要重复 8 次。

\n\n

注意:我想要一个除使用Microsoft R Open之外的解决方案。我不喜欢使用微软指手画脚的东西。

\n\n

此致。

\n