R中的单进程(共享内存)多CPU并行

时间:2018-05-28 15:27:57

标签: r parallel-processing

我已经使用了mclapply并且非常喜欢它。这是一个记忆猪,但非常方便。唉,现在我有一个不同的问题,不仅仅是令人尴尬的平行。

R(esp Unix R)可以在一台计算机上使用多个CPU内核,共享相同的内存空间,而无需复制完整的OS进程,因此

  1. 最小的流程开销;和

  2. 一个CPU对全局数据的修改是否可以立即供其他CPU使用?

  3. 如果是,R可以像文件一样锁定一些内存(flock)吗?

    我怀疑答案是否定的,明确地学习这将是非常有用的。如果答案是肯定的,请指出正确的方法。

    的问候,

    / IAW

2 个答案:

答案 0 :(得分:1)

您是否可以使用自定义Math Kernel Library(MKL)查看Microsoft的R Open(适用于Linux)。 我没有重写代码就看到了非常好的性能提升。

https://mran.microsoft.com/documents/rro/multithread

答案 1 :(得分:1)

您可以使用Rdsm包来使用分布式共享内存并行性,即使用相同内存空间的多个R进程。

除此之外,您还可以使用多线程BLAS / LAPACK(例如OpenBLAS或Intel MKL),并且您可以与OpenMP一起使用C / C ++(可能还有Fortran)代码。有关示例,请参阅assembling a matrix from diagonal slices with mclapply or %dopar%, like Matrix::bandSparse