微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

makeForkCluster 和 nvblas由 LD_PRELOAD 加载

如何解决makeForkCluster 和 nvblas由 LD_PRELOAD 加载

我想加快速度较慢的 R 脚本。

我测试了两种不同的策略:

  • 使用 ma​​keForkCluster 的多线程。这种策略提高了性能,减少了执行时间。
  • GPU 卸载。我正在使用 blas 库的替代品。 (nvblas)。为了注入库,我使用 LD_PRELOAD 方法

这两种方法给我带来了很好的性能提升,但我想同时使用它们,因为 GPU 没有完全加载。

我尝试将 MT makeForkCluster 和 nvblas 一起使用。我注意到 nvblas 不会拦截来自线程的调用(由 makeForkCluster 分叉)。

我不明白为什么会发生这种情况,如果我从 makeForkCluster 切换到 makeCluster 它可以工作。但是我想使用 Fork 方法(不需要序列化)。

示例代码

library(foreach)
library(parallel)

ncpus = 10
N = 20

#cl <- parallel::makeForkCluster(ncpus,outfile="")
cl <- parallel::makeCluster(ncpus,outfile="")
doParallel::registerDoParallel(cl)

test = function(i){
 message("started",i)
 ORDER = 8*(2^i)
 A = matrix(rnorm(ORDER^2),nrow=ORDER)
 B = matrix(rnorm(ORDER^2),nrow=ORDER)
 cputime = system.time({C = A %*% B})[3]
 message("completed",i)
 return(cputime)
}

foreach(i = 1:N,.combine = 'c') %dopar% {
  test(i)
}

您有什么建议吗?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。