2010-10-01 40 views
0

我在12个线程中并行化了一个模拟引擎,以在12个节点(每个节点运行一个线程)的群集上运行它。由于12个系统的可用性一般较少,我还调整了6个线程(在6个节点上运行),4个线程(在4个节点上运行),3个线程(在3个节点上运行)和2个线程(在2个节点上运行)。我注意到节点/线程的数量越多,加速越多。但显然,我使用的节点越多,执行成本越高(就成本和功耗而言)。针对高度并行化问题的最佳线程数

我想发布这些结果在日记中,所以我想知道是否有任何法律/定理,这将有助于我决定我应该运行此程序的节点的最佳数量?

感谢,
Akshey

回答

3

你是如何平行你的程序和你的每个节点里面的东西的?

例如,在我的一个集群上,我有几百个节点,每个节点包含4个双核Xeon。如果我要在这个集群上运行OpenMP程序,我会在一个节点上执行一次执行,并启动不超过8个线程,每个处理器核心一个。我的集群由Grid Engine管理,用于批处理作业,因此在作业运行时不会发生争用。通常,要求运行OpenMP作业的多个节点没有意义,因为共享内存方法在分布式内存硬件上不起作用。通过在8核心节点上请求少于8个线程,并没有太多的收获,我有足够的硬件可以不必共享它。

如果您已经使用了分布式内存编程方法(如MPI),那么您可能正在使用多个进程(而不是线程),并且可能正在不同节点上的核心上执行这些进程,通信流量方面的成本。

由于@Blank已经指出了运行程序的最有效方式,如果通过效率的意思是'最小化总cpu-hours',就是在1个内核上运行程序。只要。然而,对于可以在256个内核上花费一周时间的我的工作,等待一个内核完成工作128周的工作并不具吸引力。

如果您还不熟悉下列术语,谷歌围绕他们或头维基百科:

  • Amdahl定律
  • 古斯塔夫森定律
  • 弱缩放
  • 强缩放
  • 并行加速,并行加速
  • 可扩展性。
+0

+1;一旦你理解了马克列表上的所有条款,你就可以更好地回答自己的问题,并撰写论文的“表现”部分。 – 2010-10-02 18:22:25

0

增加节点的数量导致收益递减。两个节点不是一个节点的两倍;四个节点甚至不到两个。因此,节点的最佳数量总是一个;使用单个节点,您可以在每个节点上完成大部分工作。

2

“如果有任何法律/定理可以帮助我决定运行该程序的节点的最佳数量吗?”

没有这样的一般规律,因为每个问题都有一些不同的特征。

您可以在不同数量的节点上创建问题性能的数学模型,知道需要完成多少计算工作,需要完成多少通信以及每个需要多长时间。 (通信时间可以通过通信量,以及节点互连类型的典型延迟/带宽数量来估算)。这可以指导你做出好的选择。

这些模型对理解正在发生的事情是有价值的,但为了确切地确定适合您的代码的节点的正确数量,以确定某个给定的问题大小,真正无法替代运行缩放测试 - 运行问题在不同数量的节点上,并真正看到它如何执行。你想看到的数字是:

  • 完成时间为处理器数的函数: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