在R中如何控制BLAS并行矩阵积中的多线程

在R中如何控制BLAS并行矩阵积中的多线程,r,multithreading,matrix,blas,R,Multithreading,Matrix,Blas,我有一个关于在R中使用BLAS并行化矩阵积的问题(至少从R-3.4开始,可能更早,是默认的矩阵积) 默认行为(至少在我的机器上)现在是矩阵产品(下面的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 # mult

我有一个关于在R中使用BLAS并行化矩阵积的问题(至少从R-3.4开始,可能更早,是默认的矩阵积)

默认行为(至少在我的机器上)现在是矩阵产品(下面的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
会话信息:

> 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
软件包就是这样做的

根据其描述:

控制“BLAS”(也称为“GotoBLAS”、“ACML”和“MKL”)上的线程数。并且可以控制“OpenMP”中的线程数。如果可行,获取多个逻辑核和物理核

我们在中提到了它。

软件包就是这样做的

根据其描述:

控制“BLAS”(也称为“GotoBLAS”、“ACML”和“MKL”)上的线程数。并且可以控制“OpenMP”中的线程数。如果可行,获取多个逻辑核和物理核


我们在报告中提到了这一点。

非常感谢。这正是我需要的。在问我的问题之前,我确实搜索过类似的东西,但没有找到。我想我会就此事联系R核心团队。文件(matmult)在这一点上不清楚。使用matrix product中所有可用内核的默认行为可能是共享计算资源上的一个巨大问题。谢天谢地,阿加尼正在上班途中,没有机会发表评论。我很期待托马斯在r-devel上给你的答案。这在(基于英特尔的)MKL、OpenBLAS。。。通过已知的环境变量,可用的BLAS选择记录在R中,简而言之,这里没有问题。您(或您的系统管理员)选择安装OpenBLAS;R与此无关。我们(在Debian/Ubuntu中)为您提供了几种BLAS实现的选择。所有这些在这里、在R列表上以及在其他地方都被废弃了一百万次。这里没什么新鲜事。谢谢,我理解。我关心的主要是我的一个软件包的用户,它结合了“并行”软件包多线程和矩阵产品。不过,我现在明白了,他们有责任了解BLAS实现的工作原理。非常感谢。这正是我需要的。在问我的问题之前,我确实搜索过类似的东西,但没有找到。我想我会就此事联系R核心团队。文件(matmult)在这一点上不清楚。使用matrix product中所有可用内核的默认行为可能是共享计算资源上的一个巨大问题。谢天谢地,阿加尼正在上班途中,没有机会发表评论。我很期待托马斯在r-devel上给你的答案。这在(基于英特尔的)MKL、OpenBLAS。。。通过已知的环境变量,可用的BLAS选择记录在R中,简而言之,这里没有问题。您(或您的系统管理员)选择安装OpenBLAS;R与此无关。我们(在Debian/Ubuntu中)为您提供了几种BLAS实现的选择。所有这些在这里、在R列表上以及在其他地方都被废弃了一百万次。这里没什么新鲜事。谢谢,我理解。我关心的主要是我的一个软件包的用户,它结合了“并行”软件包多线程和矩阵产品。然而,我现在明白了,了解BLAS实现的工作原理是他们的责任。