Parallel processing 高度并行化问题的最佳线程数

Parallel processing 高度并行化问题的最佳线程数,parallel-processing,cluster-computing,Parallel Processing,Cluster Computing,我将模拟引擎并行化为12个线程,在12个节点(每个节点运行一个线程)的集群上运行它。由于12个系统的可用性通常较少,我还调整了6个线程(在6个节点上运行)、4个线程(在4个节点上运行)、3个线程(在3个节点上运行)和2个线程(在2个节点上运行)。我注意到,节点/线程的数量越多,速度就越快。但是很明显,我使用的节点越多,执行就越昂贵(在成本和功耗方面) 我想在杂志上发表这些结果,所以我想知道是否有任何定律/定理可以帮助我确定运行此程序的最佳节点数 谢谢, Akshey增加节点数量会导致回报减少。两

我将模拟引擎并行化为12个线程,在12个节点(每个节点运行一个线程)的集群上运行它。由于12个系统的可用性通常较少,我还调整了6个线程(在6个节点上运行)、4个线程(在4个节点上运行)、3个线程(在3个节点上运行)和2个线程(在2个节点上运行)。我注意到,节点/线程的数量越多,速度就越快。但是很明显,我使用的节点越多,执行就越昂贵(在成本和功耗方面)

我想在杂志上发表这些结果,所以我想知道是否有任何定律/定理可以帮助我确定运行此程序的最佳节点数

谢谢,

Akshey

增加节点数量会导致回报减少。两个节点的速度不是一个节点的两倍;四个节点甚至少于两个节点。因此,最佳节点数始终为1;只有一个节点才能完成每个节点的大部分工作。

增加节点数量会导致回报减少。两个节点的速度不是一个节点的两倍;四个节点甚至少于两个节点。因此,最佳节点数始终为1;每个节点的大部分工作都是通过单个节点完成的。

您是如何并行化您的程序的,以及每个节点中都有哪些内容

例如,在我的一个集群上,我有几百个节点,每个节点包含4个双核Xeon。如果我在这个集群上运行OpenMP程序,我会在一个节点上执行一次,启动不超过8个线程,每个处理器核心一个线程。我的集群由网格引擎管理,并用于批处理作业,因此在作业运行时没有争用。一般来说,没有必要要求多个节点在其上运行OpenMP作业,因为共享内存方法在分布式内存硬件上不起作用。在一个8核节点上要求少于8个线程并没有什么好处,我有足够的硬件不必共享它

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

正如@Blank已经指出的那样,运行程序的最有效方法是在一个内核上运行程序,如果从效率的角度来看,其中一种方法是“最小化cpu总小时数”。只有然而,对于我的工作来说,比如说256个核需要一周的时间,等待128周一个核才能完成工作是没有吸引力的

如果您还不熟悉以下术语,请在谷歌上搜索或前往维基百科:

  • 阿姆达尔定律
  • 古斯塔夫森定律
  • 弱标度
  • 强标度
  • 并行加速
  • 并行效率
  • 可伸缩性

您是如何并行化您的程序的,以及每个节点中都有哪些内容

例如,在我的一个集群上,我有几百个节点,每个节点包含4个双核Xeon。如果我在这个集群上运行OpenMP程序,我会在一个节点上执行一次,启动不超过8个线程,每个处理器核心一个线程。我的集群由网格引擎管理,并用于批处理作业,因此在作业运行时没有争用。一般来说,没有必要要求多个节点在其上运行OpenMP作业,因为共享内存方法在分布式内存硬件上不起作用。在一个8核节点上要求少于8个线程并没有什么好处,我有足够的硬件不必共享它

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

正如@Blank已经指出的那样,运行程序的最有效方法是在一个内核上运行程序,如果从效率的角度来看,其中一种方法是“最小化cpu总小时数”。只有然而,对于我的工作来说,比如说256个核需要一周的时间,等待128周一个核才能完成工作是没有吸引力的

如果您还不熟悉以下术语,请在谷歌上搜索或前往维基百科:

  • 阿姆达尔定律
  • 古斯塔夫森定律
  • 弱标度
  • 强标度
  • 并行加速
  • 并行效率
  • 可伸缩性
“是否有任何定律/定理可以帮助我确定运行此程序的最佳节点数?”

没有这样的一般规律,因为每个问题都有稍微不同的特点

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

这些模型对于理解正在发生的事情很有价值,但要为给定的问题大小实际确定代码运行的正确节点数,没有什么可以替代运行缩放测试——在不同数量的节点上运行问题并实际查看其执行情况。您希望看到的数字是:

  • 完成时间与处理器数量的函数关系:T(P)
  • 作为处理器数量函数的加速比:S(P)=T(1)/T(P)
  • 并联效率:E(P)=S(P)/P
如何选择“正确”的节点数?这取决于你必须运行多少作业,以及