4

我使用用 python/numpy/cython 编写的模拟。由于我需要对许多模拟运行进行平均,因此我使用多处理模块批量运行所有单独的模拟运行。

在办公室,我有一个带 HT 的 i7-920 工作站。在家里,我没有 i5-560。我认为我可以在办公室的每批中运行两倍的模拟实例,并将运行时间缩短一半。令人惊讶的是,与在我的家庭工作站上花费的时间相比,每个单独实例的运行时间增加了一倍。也就是说,在家里并行运行 3 个模拟实例需要 8 分钟,而在办公室运行 6 个实例大约需要 15 分钟。使用 'cat /proc/cpuinfo' 我验证了 'siblings' = 8 和 'cpu cores' = 4,因此启用了 HT。

我不知道任何“总运行时间守恒”定律(尽管从科学的角度来看,它可能非常有趣:)),在这里跳出某人可能会对这个难题有所了解。

4

4 回答 4

5

超线程可能适用于某些类型的工作负载。密集的数字计算不是其中之一 - 当您想要进行一些数字运算时,您最好关闭超线程。超线程提供的是任务之间的“自由上下文切换”,但 CPU 只有这么多的执行单元。

在这种情况下,它会使事情变得更糟,因为操作系统无法知道哪些进程在不同的内核上运行(它们会在哪里获得完整的性能),哪些在同一个内核上,只是在不同的“超线程”上。

(实际上,我敢打赌,Linux 内核可以提供一种方式让人们对其进行精细控制,但 Python 的多处理模块只会启动将使用默认资源分配的额外进程)。

底线:如果可以,请关闭 HT - 至少您将充分利用 4 个内核。

于 2011-12-07T14:39:23.683 回答
3

也许上下文切换会产生更多开销,这是由 6 个大规模计算进程和只有 4 个真实内核引起的。如果进程竞争 cpu 资源,它们可能会使用低效的 cpu 缓存。

如果只启用 4 核而不是 6 核,结果如何?

于 2011-12-07T14:04:47.357 回答
1

其他人已经为您提供了对该问题的深入了解,我只想通过链接这篇文章来做出贡献,该文章解释了更多关于 HT 的工作原理以及对多线程程序的性能有何影响:http://software。 intel.com/en-us/articles/performance-insights-to-intel-hyper-threading-technology/

于 2012-01-21T10:39:46.367 回答
0

用我的HP工作站(16核/cpu,使用超线程到32个处理器),打开超线程甚至在我运行数值模拟时破坏了python,错误代码是0x000005这让我很困惑,直到我转向HT关闭,模拟效果很好!也许您可以检查并比较 HT 开启和关闭的运行时间

于 2015-09-16T09:10:25.160 回答