哪些R并行化/ HPC包允许在循环内并行化?

时间:2014-01-12 06:54:45

标签: r parallel-processing

假设我有一个带有$ V $第一级节点的分层贝叶斯模型,其中$ V $非常大,我将进行$ S $模拟。我的想法是,通过并行化每个第一级节点的计算,当然还可以并行运行多个链,我可以从中受益。所以我将有两个for*apply级别,多个链的并行化之一,以及一个用于特定链的迭代内的第一级节点计算的并行化。在什么R包中,如果有的话,这可能吗?谢谢。

根据要求,这里有一些我想要做的事情的高级伪代码:

for node in top.cluster {
    for draw in simulation {
        draw population.level.variables from population.level.conditionals
        for node in bottom.cluster {
            draw random.effect[node] from random.effect.conditionals[node]
        }
    }
}

这更有意义吗?

1 个答案:

答案 0 :(得分:2)

通常,最好在计算的最外层进行并行化,因为这样可以尽可能地避免通信开销。除非你告诉我们更多细节,否则我没有看到在两个明确的代码级别并行化的重点。

以下是一些例外情况:

  • 当然,如果对于你的外循环,每次迭代取决于最后一次的结果,那么(很容易)可能不会这样做。

  • 另一个需要注意的是,您需要为此高级并行化提供足够的内存,因为(可能)需要将n个数据副本保存在RAM中。

  • 在R中,您可以使用并行BLAS(我使用OpenBLAS)进行隐式*并行化矩阵计算,它也不需要更多内存。根据BLAS完成的计算量,您可能需要调整“外部”并行化和BLAS使用的线程数。
    *不对代码进行任何更改


以下是high-performance computation task view,其中概述了pacakges

就个人而言,我主要使用snow +并行BLAS。