3

我已经开始使用doMCR 的包作为并行plyr例程的并行后端。

并行化本身似乎工作正常(尽管我还没有正确地对加速进行基准测试),我的问题是日志记录现在是异步的,并且来自不同内核的消息混合在一起。我可以为每个核心创建不同的日志文件,但我认为我更简洁的解决方案是简单地为每个核心添加不同的标签。我目前正在使用该log4r包来满足我的日志记录需求。

我记得在使用 MPI 时,每个处理器都有一个等级,这是一种区分每个进程的方法,那么有没有办法做到这一点doMC?我确实有提取 PID 的想法,但这看起来确实很混乱,并且每次迭代都会改变。

我对想法持开放态度,所以欢迎任何建议。

编辑(2011-04-08):根据一个答案的建议,我仍然有正确识别我当前所在的子进程的问题,因为我需要为每个log()调用单独关闭以便它写入正确的文件,或者我将有一个log()函数,但其​​中有一些逻辑来确定要附加到哪个日志文件。在任何一种情况下,我仍然需要某种方式来标记当前子流程,但我不确定如何做到这一点。

mpi_rank()MPI库中是否有等效的功能?

4

1 回答 1

4

我认为让多个进程写入同一个文件是灾难的根源(虽然它只是一个日志,所以也许“灾难”有点强烈)。

我经常在染色体上并行工作。这是我要做的一个例子(我主要使用 foreach/doMC):

foreach(chr=chromosomes, ...) %dopar% {
  cat("+++", chr, "+++\n")
  ## ... some undoubtedly amazing code would then follow ...
}

并且得到相互践踏的输出并不罕见......就像(不完全是)这样的:

+++chr1+++
+++chr2+++
++++chr3++chr4+++

......你明白了......

如果我站在你的立场上,我想我会为每个进程拆分日志,并将它们各自的文件名设置为相对于该进程循环中发生的事情是唯一的(就像chr我上面的例子一样)。如果您必须……稍后再整理它们……即。映射/减少您的日志文件:-)

于 2011-03-29T13:13:42.253 回答