我使用用 python/numpy/cython 编写的模拟。
由于我需要对许多模拟运行进行平均,因此我使用多处理模块来批量运行所有单独的模拟运行。
在办公室,我有一个带 HT 的 i7-920 工作站。我家里有一台 i5-560,没有。
我认为我可以在办公室中每批运行两倍的模拟实例,并将运行时间减少一半。令人惊讶的是,与我的家庭工作站上花费的时间相比,每个实例的运行时间增加了一倍。也就是说,在家中并行运行 3 个模拟实例大约需要 8 分钟,而在办公室运行 6 个实例大约需要 15 分钟。使用“cat /proc/cpuinfo”我验证了“siblings”= 8 和“cpu cores”= 4,因此启用了 HT。
我不知道任何“总运行时间守恒”定律(尽管从科学的角度来看它可能非常有趣:)),并且希望这里有人可能会对这个难题有所启发。
超线程可能适合某些类型的工作负载。密集的数字计算不是其中之一 - 当您想要进行一些数字运算时,您最好关闭超线程。
超线程提供的是任务之间“自由的上下文切换”,但CPU只有这么多的执行单元。
在这种情况下,它可能会让事情变得更糟,因为 O.S.无法知道哪些进程在单独的内核上运行(它们将在其中获得全部性能),以及哪些进程在同一内核上运行,只是在不同的“超线程”上。
(实际上,我敢打赌 Linux 内核可以提供一种方法来对此进行精细控制,但 Python 的多处理模块只会启动使用默认资源分配的额外进程)。
底线:如果可以的话,关闭 HT - 至少你会充分利用 4 个核心。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)