首页 > 解决方案 > 为什么 MRO 有时会在并行应用程序中“停滞”?

问题描述

我一直在尝试优化 Bioconductor 包以进行并行处理。在这样做的过程中,我遇到了两位在串行中运行良好的代码,但是使用mclapply时,进程会停止(0% CPU 和磁盘使用率),但实际上从未失败或出错。

一个是 arma/armadillo 矩阵和向量的乘法,我还不能得到一个最小的工作表示。我已经为下面的另一个包含了一个代表(取矩阵的特征值/向量)。有趣的是,使用 运行代码doParallel似乎可以正常工作。

library("parallel")
library("foreach")
library("doParallel")

m <- diag(100)
eigen(m)
lapply(1:10, function(i) eigen(m))
mclapply(1:10, function(i) eigen(m))

cl <- makeCluster(2)
registerDoParallel(cl)
foreach(i = 1:10) %dopar% eigen(m)

这是由于 MRO 使用了多线程的 BLAS 库。

标签: rparallel-processing

解决方案


推荐阅读