我有以下问题。
首先我的环境,我有两个24-CPU服务器和一个大工作(重新采样一个大数据集),以便在它们之间共享。我在每个上设置了多核和(套接字)Snow集群。作为一个高级接口我正在使用foreach。
这份工作的最佳分享是什么?我应该使用来自两台机器的CPU设置Snow集群并以这种方式拆分作业(即使用doSNOW作为foreach循环)。或者我应该单独使用这两个服务器并在每个服务器上使用多核(即将作业分成两个块,在每个服务器上运行它们然后将它们重新组合在一起)。
基本上什么是简单的方法: 1.保持服务器之间的通信停止(因为这可能是最慢的位)。 2.确保服务器中生成的随机数不是高度相关的。
答案 0 :(得分:3)
Snow
和multicore
在一个重要方面有所不同 - multicore
分叉一个新进程,因此它使用与主进程相同的内存。这意味着如果您使用snow
,则需要分发(物理发送和存储在儿童空间中)您要处理的数据,但如果您使用multicore
,则孩子将只能访问主要数据进程的数据副本 - 因此它可以节省传输和内存使用。
答案 1 :(得分:1)
没有足够的经验回答(1)。但避免(2)的方法是使用一个用于并行程序的随机数生成器:查看rlecuyer
包和clusterSetupRNG
中的snow
函数。