【发布时间】:2016-12-28 04:07:20
【问题描述】:
我有一个数组
A(1:n_max)
我想用 MPI 分散它以评估一些 f(A(j))。然而 f(A(1)) 的评估需要 0.35 秒,而 f(A(n_max)) 的评估需要 15 秒。我对如何解决它有不同的想法,但我不确定哪个是最好的:
-
一些主/从工作负载分布。
大致如下:http://www.hpc.cam.ac.uk/using-clusters/compiling-and-development/parallel-programming-mpi-example
-
我用 Reshape(Transpose(Reshape(A)) 对 A 重新排序,这会变成
数组([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17、18、19、20、21、22、23、24、25、26、27、28、29、30、31、32、33、 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68、69、70、71、72、73、74、75、76、77、78、79、80、81、82、83、84、 85、86、87、88、89、90、91、92、93、94、95、96、97、98])
进入
array([[ 0, 33, 66, 1, 34, 67, 2, 35, 68, 3, 36, 69, 4, 37, 70, 5, 38,
71, 6, 39, 72, 7, 40, 73, 8, 41, 74, 9, 42, 75, 10, 43, 76, 11,
44, 77, 12, 45, 78, 13, 46, 79, 14, 47, 80, 15, 48, 81, 16, 49, 82,
17, 50, 83, 18, 51, 84, 19, 52, 85, 20, 53, 86, 21, 54, 87, 22, 55,
88, 23, 56, 89, 24, 57, 90, 25, 58, 91, 26, 59, 92, 27, 60, 93, 28,
61, 94, 29, 62, 95, 30, 63, 96, 31, 64, 97, 32, 65, 98]])
然后我可以使用 scatter 和 gather 进行分发。问题是,一个进程必须运行 f(A(0))、f(A(33)) 和 f(A(66)),而另一个必须运行 f(A(32))、f( A(65)) 和 f(A(98))。
遗憾的是,两者之间的运行时间单调上升,但不是线性的。
- 我希望你的一些想法
你有什么推荐的?
【问题讨论】:
标签: fortran mpi distributed-computing