在Windows上使用doSMP并行计算函数

时间:2010-08-03 11:50:06

标签: r foreach parallel-processing

我正在尝试多核函数(在Windows中),它一度调用另一个主力函数(函数内的函数)。这是一个最小的工作示例。您需要doSMPrevoIPC个软件包(要获取它们,请参阅Tal的帖子here)。

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%

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

如何使用{{1}}从外部调用函数?

2 个答案:

答案 0 :(得分:1)

它看起来像范围问题

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

答案 1 :(得分:0)

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

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

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

而不是

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