无法删除以前的doSMP队列

时间:2011-03-04 18:15:06

标签: r multicore

我正在尝试使用doSMP,当我尝试w <- startWorkers(4)时,我收到了错误

  

1:在startWorkers(workerCount = 4)中:

    有一个使用doSMP1的现有doSMP会话

(实际上是doSMP1,... doSMP8)。现在,当我尝试使用rmSessions('doSMP1')删除它时,我收到错误消息

  

尝试删除qnames:doSMP1

    无法删除队列:doSMP1

有关如何使其发挥作用的任何建议。在我的8核机器上,doSNOW从版本2.11停止工作,我希望能够在本地并行处理,而无需将内容发送到Linux服务器。

我在8核机器上的WinXP 64位上运行R 2.12.1(32位)。

1 个答案:

答案 0 :(得分:5)

实际上,doSMP开发用于Revolution构建,并且在您的系统上相当繁重。根据我的经验,如果你不是非常非常小心你正在做的事情,那么它很容易让R崩溃。对于并行计算,我对包snowsnowfall(基本上是雪的前端)和multicore有更好的体验。

同时确保使用最新版本的R(2.12.2),因为doSMP的当前版本是针对2.12.2编译的。

如果你真的需要摆脱这些会话,你可以尝试删除查看workers对象时指定的临时目录中的文件:

>  w <- startWorkers(workerCount = 4)
> w
$taskq
<pointer: 0x05974f20>

$qname
[1] "doSMP1"

$workerCount
[1] 4

$tmpdir
[1] "C:\\Users\\JORISF~1\\AppData\\Local\\Temp\\RtmpXxLcTk\\doSMP44c815a1"

你应该清楚这个目录。在记下临时文件后,首先停止当前工作程序,然后尝试删除所有会话:

stopWorkers(w)
rmSessions(all=TRUE)

然后清理目录。然后重新启动R.有时会发生在启动后仍有剩余的会话在运行,如果再次使用startWorkers(),您会看到。如果是这样,请先使用第一个stopWorkers(w)而不先注册!然后再做rmSessions(all = TRUE)。有时R会崩溃。按照此处的说明重新启动并继续。

最后,忘记doSMP并使用其他提到的包之一。如果您没有以前的经验,降雪会给您带来最少的麻烦。有一个很好的介绍here

更新:从R2.14开始,您拥有内置程序包parallel,该程序包结合了multicoresnow的功能。