2013-05-28 51 views
1

我运行(k)Ubuntu 12.04.2和R 3.0.1R不再运行并行

我写了一堆用于并行运行的代码,但现在不再运行了。甚至没有这个并行运行:

library(doMC) 
registerDoMC(4) 
Results = foreach (i = 1:1e6, .combine = "c") %dopar% { 
    sqrt(i) 
} 

而且绝对应该。我认为破坏它是R 3.0.1更新或我安装的-dev, -devel BLAS软件包。 (openBLAS我认为)

我试过system(sprintf("taskset -p 0xffffffff %d", Sys.getpid()))其他地方的建议,并得到这样的结果:

pid 2415's current affinity mask: 1 
pid 2415's new affinity mask: f 

我也试着与运行R:后两种的

taskset 0xffff R 

然而运行循环的这些步骤仍然只使用一个内核。

我想要并行处理回来!我怎么才能得到它?

+1

您是否尝试过通过taskset执行R,如'$ taskset 0xffff R'中所示?在初始化OpenBLAS之前,可能需要正确设置CPU亲和性。 –

+0

是的,我曾试过。编辑Q来反映这一点。 –

回答

1

我找到了解决方案!讽刺的是,得到的并行处理回我有

taskset 0xffff R 

两者都做的我在Q 同时提到的步骤

因此,启动,则成为运行

system(sprintf("taskset -p 0xffffffff %d", Sys.getpid())) 

内R.

瞧,并行处理返回

+0

这很奇怪。你这次执行“taskset -p”时是否得到了关于亲和性掩码的相同消息,还是他们不同? –

+0

我得到了1,然后f。这让我很困惑。 –

+0

它可能与R的各种shell脚本包装有关。你可以尝试使用'Rscript',使用'$ taskset 0xffff Rscript domc.R'这样的命令而不在R脚本中执行'taskset -p' ?我认为Rscript仍然是一个简单的可执行文件,所以可能有区别。 –