使用Snow和/或multicore优化共享繁重的计算工作

时间:2010-03-12 21:49:04

标签: optimization r parallel-processing

我有以下问题。

首先我的环境,我有两个24-CPU服务器和一个大工作(重新采样一个大数据集),以便在它们之间共享。我在每个上设置了多核和(套接字)Snow集群。作为一个高级接口我正在使用foreach。

这份工作的最佳分享是什么?我应该使用来自两台机器的CPU设置Snow集群并以这种方式拆分作业(即使用doSNOW作为foreach循环)。或者我应该单独使用这两个服务器并在每个服务器上使用多核(即将作业分成两个块,在每个服务器上运行它们然后将它们重新组合在一起)。

基本上什么是简单的方法:  1.保持服务器之间的通信停止(因为这可能是最慢的位)。  2.确保服务器中生成的随机数不是高度相关的。

2 个答案:

答案 0 :(得分:3)

Snowmulticore在一个重要方面有所不同 - multicore 分叉一个新进程,因此它使用与主进程相同的内存。这意味着如果您使用snow,则需要分发(物理发送和存储在儿童空间中)您要处理的数据,但如果您使用multicore,则孩子将只能访问主要数据进程的数据副本 - 因此它可以节省传输和内存使用。

答案 1 :(得分:1)

没有足够的经验回答(1)。但避免(2)的方法是使用一个用于并行程序的随机数生成器:查看rlecuyer包和clusterSetupRNG中的snow函数。