Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何控制R使用的CPU数量?_R - Fatal编程技术网

如何控制R使用的CPU数量?

如何控制R使用的CPU数量?,r,R,我使用的是它本身依赖于其他一些R包(survival、nbpMatching、MASS),而这反过来又导入了更广泛的依赖关系。 crossmatch包在一个(可能的)大矩阵上实现了一个统计测试,我需要经常计算这个矩阵(在MCMC算法中)。我编写了以下包装器,在计算实际测试之前计算一些预处理步骤(即最后一行中的crossmatchtest()): 通过htop进行监控。但是,如果我增加这个矩阵,R将使用尽可能多的可用内核(至少看起来是这样的): 一般来说,我对这种并行化很满意,但我希望能够手动控制

我使用的是它本身依赖于其他一些R包(survival、nbpMatching、MASS),而这反过来又导入了更广泛的依赖关系。 crossmatch包在一个(可能的)大矩阵上实现了一个统计测试,我需要经常计算这个矩阵(在MCMC算法中)。我编写了以下包装器,在计算实际测试之前计算一些预处理步骤(即最后一行中的
crossmatchtest()
):

通过
htop
进行监控。但是,如果我增加这个矩阵,R将使用尽可能多的可用内核(至少看起来是这样的):

一般来说,我对这种并行化很满意,但我希望能够手动控制R进程使用的内核数量。我尝试了
选项(mc.cores=4)
但没有成功


我还可以设置其他变量吗?或者,找到负责使用多个核心的包的最佳方法是什么?

让我们看看依赖项:

library(miniCRAN)
tags <- "crossmatch"
dg <- makeDepGraph(tags, enhances = FALSE, suggests = FALSE)
set.seed(1)
plot(dg, legendPosition = c(-1, 1), vertex.size = 20)

首先,您需要告诉我们您的代码的哪一部分是并行的。您使用的任何函数?还是BLAS中的并行化与R相关联?Vanilla(base)R没有并行化。这就是我问题的重点:我没有并行化任何代码,它只是自动发生在依赖关系的深处,我不知道在哪里。我在文档中查找了crossmatch、NbpMatch和MASS,看看他们是否讨论了并行化,但他们没有。编辑:上面的代码应该足以在你自己的电脑上运行。有趣的是,并行化只发生在我的Ubuntu 16.04和macOS 10.12下,而不是在Fedora 27下。哦,酷,谢谢这个有趣的图表!显然,data.table不是我问题的原因,因为当我加载它时(这次在mac上),它会报告以下内容:“data.table的此安装未检测到OpenMP支持。它仍应工作,但处于单线程模式。”我怎样才能知道R是否链接到优化的BLAS,以及有没有办法为BLAS提供最大数量的线程?您是如何安装R的?是起重机吗?我想你自己没有把它链接到优化的BLAS上。我在mac上用自制软件安装了它。在其他机器上(ubuntu 16.04,fedora 27),它来自默认发行版的软件存储库。R中是否有命令检查其是否为链接版本?
extSoftVersion()
?@kartofelsalat查看我的更新。这可能会让你解决这个问题。
library(MASS)
library(crossmatch)
source("theCodeFromAbove.R")
# create a dummy matrix
m = cbind(c(rep(0, 100), rep(1, 100)))
m = cbind(m, (matrix(runif(100), ncol=10, nrow=20, byrow=T)))
while(TRUE) { crossmatchdata(m) }
# create a dummy matrix
m = cbind(c(rep(0, 1000), rep(1, 1000)))
m = cbind(m, (matrix(runif(100000), ncol=1000, nrow=2000, byrow=T)))
while(TRUE) { crossmatchdata(m) }
library(miniCRAN)
tags <- "crossmatch"
dg <- makeDepGraph(tags, enhances = FALSE, suggests = FALSE)
set.seed(1)
plot(dg, legendPosition = c(-1, 1), vertex.size = 20)
library(RhpcBLASctl)
blas_set_num_threads(3)