我使用python / numpy / cython编写的模拟。 由于我需要平均多次模拟运行,因此我使用多处理模块批量运行所有单独的模拟运行。
在办公室,我有一个带HT的i7-920工作站。在家里我没有i5-560。 我想我可以在办公室的每一批中运行两倍的模拟实例,并将我的运行时间缩短一半。令人惊讶的是,与我在家庭工作站上的时间相比,每个实例的运行时间增加了一倍。它在家中并行运行3个模拟实例需要8分钟,而在办公室运行6个实例大约需要15分钟。使用'cat / proc / cpuinfo'我验证了'siblings'= 8和'cpu cores'= 4,因此启用了HT。
我不知道任何“总运行时间保护”法律(虽然从科学的角度来看它可能非常有趣:)),并且在这里跳跃的人可能会对这个难题有所了解。
答案 0 :(得分:5)
超线程可能对某些工作负载有利。强烈的数值计算不是其中之一 - 当你想做一些数字运算时,你最好关闭超线程。 超线程给出的是任务之间的“自由上下文切换”,但CPU只有很多执行单元。
在这种情况下,它会使事情变得更糟,因为O.S.无法知道哪些进程在不同的核心上运行(它们可以获得完整的性能),哪些进程在同一核心上,只是在不同的“超线程”上。
(实际上,我敢打赌,Linux内核可以提供一种方法来对其进行精细控制,但Python的多处理模块将只启动使用默认资源分配的额外进程)。
底线:如果可以,请关闭HT - 至少你会充分利用4核。
答案 1 :(得分:3)
上下文切换可能会产生更多的开销,这是由6个 massivly 计算过程引起的,而且只有4个真实核心。如果进程竞争cpu-ressources,他们可能会使用低效的cpu-caches。
如果你只启用4而不是6核心,结果是什么?
答案 2 :(得分:1)
其他人已经给你一个关于这个问题的见解,我只想通过链接这篇文章做出贡献,这篇文章解释了HT如何工作以及对多线程程序性能的影响:{{3 }}
答案 3 :(得分:0)
使用我的惠普工作站(16核/ cpu,使用超线程来到32个处理器),当我运行数值模拟时,甚至打破了python上的超线程,错误代码是0x000005 这让我很困惑,直到我关闭了HT,模拟效果很好! 也许你可以检查并比较HT打开和关闭的运行时间