使用超线程运行模拟使运行时间加倍

Mic*_*ant 4 python linux multiprocessing hyperthreading

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

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

我不知道任何"总运行时间保护"法律(虽然从科学的角度来看它可能非常有趣:)),并且在这里跳跃的人可能会对这个难题有所了解.

jsb*_*eno 5

超线程可能适用于某些类型的工作负载.强烈的数值计算不是其中之一 - 当你想做一些数字运算时,你最好关闭超线程.超线程给出的是任务之间的"自由上下文切换",但CPU只有很多执行单元.

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

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

底线:如果可以的话,关闭HT - 至少你会充分利用4核心.