我们购买了一台12核的MacPro来进行蒙特卡罗计算。它的Intel Xeon处理器启用了超线程(HT),因此实际上应该有24个进程并行运行,以使它们完全被利用。然而,我们的计算更有效地在12x100%上运行,而不是在24x50%上运行,因此我们尝试通过系统偏好设置中的处理器
面板关闭超线程,以获得更高的性能。人们也可以通过以下方式关闭HT:
hwprefs -v cpu_ht=false
然后我们进行了一些测试,以下是我们得到的结果:
- 12个并行任务在启用或禁用HT时同时运行,这让我们感到失望。
- 如果关闭HT,则24个并行任务会损失20%(而不是我们之前认为的50%)。
- 当启用HT时,从24个任务切换到12个任务会导致效率降低20%(这也很令人惊讶)。
- 如果关闭HT,则从24个任务切换到12个任务不会有任何变化。
gfortran
编译的。有没有办法利用这个硬件使其更有效率?
更新:我们的蒙特卡洛计算(MCC)通常分步进行,以避免数据丢失和其他原因(无法始终避免此类步骤)。在我们的情况下,每个步骤由许多持续时间可变的模拟组成。由于每个步骤被分配给多个并行任务,它们的持续时间也是可变的。基本上,所有更快的任务都必须等待最慢的任务完成。这个事实迫使我们采取更大的步骤,它们以平均值结束,因此处理器不会浪费时间等待。这就是我们选择12 * 2.66 GHz而不是24 * 1.33 GHz的动机。如果可能关闭HT,则从启用HT的24个任务切换到禁用HT的12个任务将获得约+ 10%的性能。然而,测试表明我们损失了20%。因此,我的结论是计算效率低下了30%。
我在测试中使用了相当大的步骤,但通常步骤较短,因此效率进一步降低。
还有一个原因-我们的某些计算需要3-5 GB的内存,因此您可能可以看出拥有12个快速任务对我们来说有多经济。我们正在努力实现共享内存,但这将是一个漫长的项目。因此,我们需要找出如何使现有的硬件/软件尽可能快。