我的电脑有一个四核i7处理器。我正在研究科学模拟的并行化。超线程对并行性能有何影响?我知道我永远不应该使用超过4个工作过程来获得下降的性能。但是我也应该禁用超线程吗?它对并行性能有影响吗?
发布于 2012-03-09 23:39:42
根据我的经验,运行电磁建模和反转代码,答案是肯定的,你应该禁用超线程。但这不是那种可以被其他人的轶事很好地回答的问题(即使是我的,也不是我的,尽管它们是令人着迷的和真实的)。
你是学生,这绝对是一个值得你花时间得出自己结论的话题。涉及的因素如此之多,以至于我在我的平台上运行代码的经验对您来说几乎毫无价值。
发布于 2012-03-12 22:06:25
在Linux下,如果你在一个i7上有4个繁忙的线程,它会把每个线程放在不同的内核上。如果内核的另一半是空闲的,性能应该是相同的。如果你正在运行另一个程序,那么使用超线程来运行额外的程序还是使用上下文切换更好,这是有争议的。(我怀疑上下文切换越少越好)
一个常见的错误是假设如果你使用8个线程而不是4个线程,它的速度将是原来的两倍。它可能只会稍微快一点(在这种情况下,它可能仍然是值得的)或者稍微慢一点(在这种情况下,将你的程序限制在4个线程以内)。我找到了一些使用双倍线程数稍微快一些的例子。我的天,这一切都是测试的问题,以找到最佳的数字,并使用那么多。
我唯一能看到你需要关闭HT的时候是当你无法控制你的应用程序的行为时,使用4个线程会更快。
发布于 2013-05-09 22:16:36
你声明:
我知道我永远不应该使用超过4个工作进程来获得下降的性能。
这不一定是真的!这是我发现在启用了HT的i7-3820上运行的一个示例。我运行的所有代码都是C++。假设我需要运行8个不同的程序(尽管完全相同)。我已经尝试了以下两种运行这些代码的方法:
正如您所看到的,这两个场景实现了相同的功能。然而,我发现运行时间是:
每组4个线程需要1小时的
你会发现,在第一种情况下,单个线程完成的速度会更快,但第二种情况提供了更好的性能,因为你所有的工作都在更短的时间内完成。我发现在启用HT的情况下,典型的性能提升约为25%。
很明显,在某些情况下,运行8个线程比运行4个线程要快。
https://stackoverflow.com/questions/9636716
复制相似问题