繁体   English   中英

在Windows上使用doSMP并行计算功能

[英]parallel computing of a function with doSMP on Windows

我正在尝试对一个函数进行多核(在Windows中),该函数有时会调用另一个主力函数(函数内的函数)。 这是一个最小的工作示例。 您将需要doSMPrevoIPC软件包(要获取它们,请参阅此处的 Tal文章)。

func1 <- function(x) {sqrt(x)}
func2 <- function(y) {
    func1(y)
}

library(doSMP)
wrk <- startWorkers(workerCount = 4) #I have 4 cores, so adjust to your specs
registerDoSMP(wrk)

obj.result <- foreach(i = 1:10000) %dopar% func2(i)

上面的例程不起作用,但是如果我像这样将func1嵌套在func2

func2 <- function(y) {
func1 <- function(x) {sqrt(x)}
    func1(y)
}

这个过程顺利进行(据我所知)。

如何使用%dopar%从外部调用函数?

看起来像是一个范围问题

您的func1在调用工作区中是已知的,但在计算节点上却不是。 有解决方案,例如, foreach包中有一个名为Nesting Foreach Loops的完整小插曲。

在foreach函数中,如果您有要执行功能fun2的包要加载,则有一个参数要传递

通常在您的示例中,如果fun1是软件包PACKAGE1的一部分,请执行

obj.result <- foreach(i = 1:10000, .packages="PACKAGE1") %dopar% func2(i)

代替

obj.result <- foreach(i = 1:10000) %dopar% func2(i)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM