2017-08-21 11 views
1

BLAS並列化行列積をRで使用することについて質問があります(少なくともR-3.4以降はデフォルトの行列積です)。RではBLAS並列行列積でマルチスレッドを制御する方法

デフォルトの動作(少なくとも私のマシンでは)は、現在マシン上で使用可能なすべてのコアを使用するために、マトリックス製品(以下のc.f.の例)が問題になります。

Rで標準マトリックス製品に使用されるコアの数を制御する方法を知っていますか?事前に

おかげ

例:

n=10000 
p=1000 
q=5000 
A = matrix(runif(n*p),nrow=n, ncol=p) 
B = matrix(runif(p*q),nrow=p, ncol=q) 
C = A %*% B # multi-threaded matrix product 

セッション情報:だけそれを行うRhpcBLASctl

> sessionInfo() 
R version 3.4.1 (2017-06-30) 
Platform: x86_64-pc-linux-gnu (64-bit) 
Running under: Ubuntu 16.04.3 LTS 

Matrix products: default 
BLAS: /usr/lib/openblas-base/libblas.so.3 
LAPACK: /usr/lib/libopenblasp-r0.2.18.so 

locale: 
[1] LC_CTYPE=fr_FR.utf8  LC_NUMERIC=C    
[3] LC_TIME=fr_FR.utf8  LC_COLLATE=fr_FR.utf8  
[5] LC_MONETARY=fr_FR.utf8 LC_MESSAGES=fr_FR.utf8 
[7] LC_PAPER=fr_FR.utf8  LC_NAME=C     
[9] LC_ADDRESS=C    LC_TELEPHONE=C   
[11] LC_MEASUREMENT=fr_FR.utf8 LC_IDENTIFICATION=C  

attached base packages: 
[1] stats  graphics grDevices utils  datasets methods base  

loaded via a namespace (and not attached): 
[1] compiler_3.4.1 

答えて

5

パッケージ。

'BLAS'(別名 'GotoBLAS'、 'ACML' および 'MKL')上のスレッドの数を制御する:その説明から

。 'OpenMP'のスレッド数を制御することが可能です。実行可能であれば、多数の論理コアと物理コアを取得します。

CRAN Task View on HPCに記載されています。

+0

ありがとうございました。それは私が必要とするものです。私はここで私の質問をする前にそれのようなものを探しましたが、それを見つけることができませんでした。 この問題に関してRコアチームに連絡すると思います。この時点では、文書(matmult)は明確ではありません。マトリックス製品で使用可能なすべてのコアを使用するデフォルトの動作は、共有コンピューティングリソースで大きな問題になる可能性があります。 ありがとうございました – Odin

+0

私は仕事に通っていて、コメントする機会がありませんでした。私はトマスがr-develであなたに与えた答えを期待していました。これは*(Intelベースの)MKL、OpenBLASの場合、既知の環​​境変数を使って文書化されています。利用可能なBLASの選択肢はR内に記述されています。 *あなた(またはあなたのシステム管理者)がOpenBLASのインストールを選択しました。 Rはそれに関係していません。 Debian/Ubuntuでは、いくつかのBLAS実装を選択できます。これは、ここで何百万回も、Rのリストに、そして何年もの間他の場所で議論されています。ここには新しいものはありません。 –

+0

ありがとう、私は理解しています。私の懸念事項は、主に、「パラレル」パッケージマルチスレッドとマトリックス製品を組み合わせた私のパッケージのユーザーのためでした。しかし、BLASの実装がどのように機能するかを知ることは、彼らの責任であることを理解しました。 – Odin

関連する問題