【问题标题】:In R how to control multi-threading in BLAS parallel matrix product在R中如何控制BLAS并行矩阵产品中的多线程
【发布时间】:2017-08-21 10:00:15
【问题描述】:

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

默认行为(至少在我的机器上)现在是矩阵产品(参见下面的示例)使用机器上所有可用的内核,这可能是一个问题。

你知道如何控制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

【问题讨论】:

    标签: r multithreading matrix blas


    【解决方案1】:

    RhpcBLASctl只是这样做。

    根据其描述:

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

    我们在CRAN Task View on HPC 中提到它。

    【讨论】:

    • 非常感谢。这正是我所需要的。在在这里问我的问题之前,我确实搜索过类似的东西,但找不到。我想我会就此事联系 R 核心团队。文档(matmult)在这一点上并不清楚。在矩阵产品中使用所有可用内核的默认行为可能是共享计算资源的一个巨大问题。再次感谢
    • 我正在上班,没有机会发表评论。我非常期待托马斯在 r-devel 上给你的答案。在(基于 Intel 的)MKL、OpenBLAS 的情况下,此 通过已知环境变量记录,可用的 BLAS 选择记录在 R 中,简而言之,您在这里没有问题。 (或您的系统管理员)选择安装 OpenBLAS; R 与此无关。我们(在 Debian / Ubuntu 中)为您提供了几种 BLAS 实现的选择。多年来,所有这些都在这里、在 R 列表和其他地方被讨论了一百万次。这里没有什么新鲜事。
    • 谢谢,我明白了。我关心的主要是我的一个包的用户,它结合了“并行”包多线程和矩阵产品。但是,我现在明白,了解他们的 BLAS 实现如何工作是他们的责任。
    猜你喜欢
    • 2019-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-10
    • 1970-01-01
    • 1970-01-01
    • 2022-01-12
    • 1970-01-01
    相关资源
    最近更新 更多