我的电脑配有四核i7处理器。我正在研究科学模拟的并行化。超线程如何影响并行性能?我知道我不应该使用超过4个工作流程来获得下降表现。但是我应该禁用超线程吗?它对并行性能有影响吗?
答案 0 :(得分:6)
根据我的经验,运行电磁建模和反演代码,答案是肯定的,你应该禁用超线程。但这不是其他人的轶事(甚至不是我的,有趣的和真实的)所能得到很好回答的那种问题。
你是学生,这绝对是一个值得你花时间来得出你自己的结论的话题。涉及到很多因素,我在平台上运行代码的经验几乎对你毫无价值。
答案 1 :(得分:3)
在Linux下,如果i7上有4个忙线程,它会将每个线程放在不同的核心上。如果核心的另一半空闲,则性能应该相同。如果您正在运行另一个程序,那么运行额外程序或上下文切换的超线程是否更好是有争议的。 (我怀疑上下文切换更少)
一个常见的错误是假设如果你使用8个线程而不是4个线程,那么速度将是原来的两倍。它可能只是稍微快一点(在这种情况下它可能仍然值得)或稍慢(在这种情况下将程序限制为4个线程)我已经找到了使用双倍线程数稍微快一些的示例。恕我直言,这是一个测试它的问题,以找到最佳数量并使用那么多。
我唯一能看到你需要关闭HT的时候是你无法控制应用程序的行为,并且使用4个线程的速度更快。
答案 2 :(得分:2)
你说:
我知道我不应该使用超过4个工作流程来获得下降表现。
这不一定是真的!这是我发现在启用HT的i7-3820上运行的示例。我运行的所有代码都是C ++。考虑一下,我需要运行8个独立的程序(虽然相同)。我尝试了以下两种运行这些代码的方法:
正如您所看到的,这两种情况实现了同样的目的。但是,我发现的是运行时间是:
您发现单个线程对于案例#1的完成速度更快,但整体#2提供了更好的性能,因为您的所有工作都在更短的时间内完成。我发现启用HT后,性能的典型增加约为25%。
很明显,有些情况下运行8个线程的速度比4快。
答案 3 :(得分:1)
HyperTreading是英特尔同步多线程(SMT)的实现。通常,SMT几乎总是有益的(这就是通常启用它的原因),除非您的应用程序受CPU限制。如果您确定您的应用程序受CPU限制,则禁用SMT。否则(您的应用程序受IO限制或无法完全饱和核心),请将其保持启用状态。