我有一个小型网络,配有不同硬件的电脑。是否可以使用MPI优化这些硬件之间的工作负载划分?即。给更大的ram节点和更好的cpu更多的数据来计算?最小化不同节点之间的等待时间,以便最终减少。
谢谢!
答案 0 :(得分:1)
在我的程序中,数据被分成大小相等的批次。网络中的每个节点都将处理其中的一些节点。在处理完所有批次后,每个批次的结果将汇总。
您能否将工作分成更多批次而不是流程?如果是这样,请更改您的程序,以便每次进程接收一个批处理时,只要存在未分配的批处理,主服务器就会继续将批处理发送到可用的任何节点。它应该是一个相当容易的修改,它将使更快的节点处理更多的数据,从而导致更低的总体完成时间。您可以进行进一步的增强,例如一旦分配了所有批次并且有一个快速节点可用,您可以从慢速节点取出已分配的批次并将其重新分配给所述快速节点。但这些可能不值得付出额外的努力。
如果你必须使用与节点一样多的批次,那么你必须找到一些方法来决定哪些节点很快,哪些节点很慢。也许最有效的方法是为每个流程分配小型,同等大小的测试批次,并让他们有时间自己的解决方案。然后,主设备可以将实际数据划分为每个节点的适当大小的批次。这种方法的最大缺点是,如果初始速度测量不准确,那么您在负载平衡方面的努力最终可能会带来更多弊大于利。此外,根据您使用的确切数据和算法,具有小数据集的运行时可能无法指示大数据集的运行时。
另一种方法是预先对每个节点的速度进行全面测量(即,使用大数据集进行多次运行),并根据该预编译信息具有主平衡批量大小。这里显而易见的复杂情况是,你必须以某种方式使这个注册表保持最新和可用。
总而言之,我建议采用第一种方法:将工作划分为许多较小的块,并将块分配给目前可用的任何节点。