并行计算一个lifegame状方案考虑在一个m * n个矩阵lifegame样计算,它需要O(m * n个)开发每个周期。
我将使用Pthread和MPI将此程序修改为并行版本。最简单的方法是静态分区,这意味着分割m行到t任务,每个任务处理一个m/t * n矩阵。 (t代表线程或进程的数量)
但是,此解决方案的负载平衡不佳。一个任务可能不处理任何事情,而另一个任务则必须计算几乎满的矩阵。
我首先想到的,使这个计算多个负载均衡是这样的:
分区,以与负载平衡
- 保持一个M * 1数组来存储多少个元素是每一行英寸
- 扫描测试用例后,为每个任务分配i * n矩阵。 矩阵中的元素应该等于其他任务。 同时存储每个任务中的元素数量(此处需要一个t * 1数组)
- 每个周期后,重新分配绑定到每个任务的矩阵。这将需要O(t * m)。
这将减少从O(m * n个)的时间重新分配给O(T *米)。我的第一个问题是我能否更快地重新分配?其次,在计算矩阵“边缘”上的元素时,任务必须与附近的任务进行通信,这可能需要相当长的时间才能完成。为了减少这种情况,我想我可以将原点矩阵分成几个矩形,更多的四方不细。但我不知道该怎么做,有没有关于算法名称的关键字可供我搜索?
谢谢。