2013-02-21 25 views
4

我通過關於這些指南編制R:編譯R(隨着mulithreads支持)

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?

回答

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親和性的功能。

6

我想補充我的程序編譯[R 3.0.1與MKL庫。我在覈心i7英特爾處理器,8G內存上使用Debian 7.0。首先,我安裝MKL庫後,我用這個命令設置MKL相關的環境變量(MKLROOT和LD_LIBRARY_PATH):

>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。

作爲基準,我做了產品分類二5000 X 5000矩陣產品沒有MKL,並得到:

用戶系統經過 57.455 0.104 29.033

後編譯:

用戶系統經過 15.993 0.176 4.333

一個真正的收益!