我使用了一个用python/numpy/cython编写的模拟。由于我需要对多次模拟运行进行平均,因此我使用多处理模块来批量运行所有单独的模拟运行。
在办公室,我有一台装有HT的i7-920工作站。在家里我有一台i5-560没有。我认为我可以在办公室的每一批中运行两倍的模拟实例,并将运行时间减少一半。令人惊讶的是,与在我的家庭工作站上运行的时间相比,每个实例的运行时间都增加了一倍。在家里并行运行3个模拟实例需要8分钟,而在办公室运行6个实例需要大约15分钟。使用'cat /proc/cpuinfo‘我验证了'siblings’=8和'cpu cores‘= 4,因此启用了HT。
我不知道有什么“总运行时间守恒”定律(尽管从科学的观点来看,它可能相当有趣: ),在这里跳跃的人可能会对这个难题有一些启发。
发布于 2011-12-07 22:04:47
也许上下文切换产生了更多的开销,这是由于6个大规模计算进程和只有4个真正的核心造成的。如果进程竞争cpu资源,它们可能会使用低效的cpu缓存。
如果只启用4核而不是6核,结果会是什么?
发布于 2011-12-07 22:39:24
超线程可能适用于某些类型的工作负载。密集的数值计算不是其中之一-当你想做一些数值运算时,你最好关闭超线程。超线程提供的是任务之间的“自由上下文切换”,但CPU只有这么多执行单元。
在这种情况下,它可能会使事情变得更糟,因为操作系统无法知道哪些进程在不同的核心上运行(在那里它们将获得完整的性能),以及哪些进程在相同的核心上运行,只是在不同的“超线程”上。
(实际上,我打赌Linux内核可以提供一种方法来很好地控制这一点,但是Python的多处理模块只会启动额外的进程,它将使用默认的资源分配)。
底线:如果可以的话,关闭HT --至少你会充分利用4个内核。
发布于 2012-01-21 18:39:46
其他人已经让你对这个问题有了深入的了解,我只想通过链接这篇文章来贡献自己的力量,这篇文章更多地解释了HT的工作原理,以及对多线程程序性能的影响:http://software.intel.com/en-us/articles/performance-insights-to-intel-hyper-threading-technology/
https://stackoverflow.com/questions/8416370
复制相似问题