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
ありがとうございました。それは私が必要とするものです。私はここで私の質問をする前にそれのようなものを探しましたが、それを見つけることができませんでした。 この問題に関してRコアチームに連絡すると思います。この時点では、文書(matmult)は明確ではありません。マトリックス製品で使用可能なすべてのコアを使用するデフォルトの動作は、共有コンピューティングリソースで大きな問題になる可能性があります。 ありがとうございました – Odin
私は仕事に通っていて、コメントする機会がありませんでした。私はトマスがr-develであなたに与えた答えを期待していました。これは*(Intelベースの)MKL、OpenBLASの場合、既知の環境変数を使って文書化されています。利用可能なBLASの選択肢はR内に記述されています。 *あなた(またはあなたのシステム管理者)がOpenBLASのインストールを選択しました。 Rはそれに関係していません。 Debian/Ubuntuでは、いくつかのBLAS実装を選択できます。これは、ここで何百万回も、Rのリストに、そして何年もの間他の場所で議論されています。ここには新しいものはありません。 –
ありがとう、私は理解しています。私の懸念事項は、主に、「パラレル」パッケージマルチスレッドとマトリックス製品を組み合わせた私のパッケージのユーザーのためでした。しかし、BLASの実装がどのように機能するかを知ることは、彼らの責任であることを理解しました。 – Odin