【问题标题】:How can I label my sub-processes for logging when using multicore and doMC in R在 R 中使用多核和 doMC 时,如何标记我的子进程以进行日志记录
【发布时间】:2011-03-29 12:35:11
【问题描述】:

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

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

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

不过,我对想法持开放态度,因此欢迎提出任何建议。

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

在 MPI 库中是否有与 mpi_rank() 函数等效的函数?

【问题讨论】:

    标签: r logging multicore domc


    【解决方案1】:

    我认为让多个进程写入同一个文件会导致灾难(虽然它只是一个日志,所以“灾难”可能有点强)。

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

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

    而且得到相互践踏的输出并不罕见...... 类似(不完全是)这个:

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

    ...你明白了...

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-12
      • 2018-06-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多