“如果有任何法律/定理可以帮助我决定运行该程序的节点的最佳数量吗?”
没有这样的一般规律,因为每个问题都有一些不同的特征。
您可以在不同数量的节点上创建问题性能的数学模型,知道需要完成多少计算工作,需要完成多少通信以及每个需要多长时间。 (通信时间可以通过通信量,以及节点互连类型的典型延迟/带宽数量来估算)。这可以指导你做出好的选择。
这些模型对理解正在发生的事情是有价值的,但为了确切地确定适合您的代码的节点的正确数量,以确定某个给定的问题大小,真正无法替代运行缩放测试 - 运行问题在不同数量的节点上,并真正看到它如何执行。你想看到的数字是:
- 完成时间为处理器数的函数:T(P)
- 提速为处理器数的函数:S(P)= T(1)/T(P)
- 并行效率:E(P)= S(P)/ P
你如何选择节点的 “权” 是多少?这取决于您需要运行多少个作业,以及计算资源的可接受使用情况。例如,在绘制您的时序结果时,您可能会发现在某些处理器数量上有最短的时间完成T(P) - 例如32个。因此,这可能看起来像是“最佳”选择。但是当你看效率数字时,可能会很清楚,在这之前效率开始急剧下降;而且在16个处理器上运行时间只有(比如说)运行时间减少了20% - 也就是说,对于计算资源量的两倍来说,速度只增加了1.25倍。这通常是一个糟糕的交易,而且你更愿意在更少的处理器上运行 - 特别是如果你有很多这些模拟运行的话。 (例如,如果您有两个模拟运行,例如,在这种情况下,您可以通过在16个处理器上同时运行两个模拟,而不是在32个处理器上一次运行两个模拟,以1.25个时间单位插入2个时间单位来完成它们)。
另一方面,即使您的资源使用效率低下,但有时候您只需要几次运行就可以完成,而且时间确实非常重要。金融建模可以是这样的 - 他们需要对未来市场的预测现在,他们有钱投掷计算资源,即使他们没有100%有效地使用。
其中一些概念在任何并行编程教程的“并行性能简介”一节中讨论;这里是我们的例子,https://support.scinet.utoronto.ca/wiki/index.php/Introduction_To_Performance
+1;一旦你理解了马克列表上的所有条款,你就可以更好地回答自己的问题,并撰写论文的“表现”部分。 – 2010-10-02 18:22:25