在R中设置PSOCK群集的精度

时间:2016-10-10 18:23:43

标签: r parallel-processing renice

我想增加群集作业的优点。以下代码成功:

> cl <- makePSOCKcluster(rep('localhost', 2))
> clusterEvalQ(cl = cl, rnorm(3))
[[1]]
[1] -0.6452848 -0.9899609  0.3083131

[[2]]
[1]  1.1687733 -0.1930413  1.1576510

然而,这不是。

cl <- makePSOCKcluster(names = rep('localhost', 8), renice = 15)
nice: +15: No such file or directory

我可以使用以下代码在集群创建后设置好处:

clusterEvalQ(cl = cl, tools::psnice(value = 15))

在阅读makePSOCKcluster的文档后,我不确定在群集创建步骤中我做错了什么,并且无法追踪问题。如何创建集群并同时设置工作线程的漂亮性?

1 个答案:

答案 0 :(得分:1)

我认为这是“并行”包中的错误。当你使用makePSOCKcluster“renice”选项时,它使用了一个不适用于bash的“nice”命令的形式,但我相信可以使用csh / tcsh。您可以使用“manual = TRUE”选项查看生成的命令:

> library(parallel)
> cl <- makePSOCKcluster(2, renice=15, manual=TRUE)
Manually start worker on localhost with
  nice +15 '/home/sw/R/sources/R-3.3.0/bin/Rscript' --default-packages=datasets,utils,grDevices,graphics,stats,methods -e 'parallel:::.slaveRSOCK()' MASTER=localhost PORT=11379 OUT=/dev/null TIMEOUT=2592000 XDR=TRUE 

如果您尝试从bash执行此操作,您将收到您报告的相同错误消息。 bash的语法应该是:

$ nice -n 15 '/home/sw/R/sources/R-3.3.0/bin/Rscript' ...