Performance 我应该禁用超线程来运行并行模拟吗?

Performance 我应该禁用超线程来运行并行模拟吗?,performance,optimization,parallel-processing,hyperthreading,Performance,Optimization,Parallel Processing,Hyperthreading,我的电脑有一个四核i7处理器。我在研究科学模拟的并行化。超线程如何影响并行性能?我知道我不应该使用超过4个工作过程来获得下降性能。但是我也应该禁止超读吗?它对并行性能有影响吗?根据我的经验,在运行电磁建模和反转代码时,答案是肯定的,应该禁用超线程。但这并不是一个被其他人的轶事很好地回答的问题(即使是我的轶事也不是,尽管它们是迷人和真实的) 你是学生,这绝对是一个值得你花时间得出自己结论的话题。涉及的因素太多了,我在我的平台上运行代码的经验对您来说几乎一文不值。超线程是Intel同时多线程(SMT

我的电脑有一个四核i7处理器。我在研究科学模拟的并行化。超线程如何影响并行性能?我知道我不应该使用超过4个工作过程来获得下降性能。但是我也应该禁止超读吗?它对并行性能有影响吗?

根据我的经验,在运行电磁建模和反转代码时,答案是肯定的,应该禁用超线程。但这并不是一个被其他人的轶事很好地回答的问题(即使是我的轶事也不是,尽管它们是迷人和真实的)


你是学生,这绝对是一个值得你花时间得出自己结论的话题。涉及的因素太多了,我在我的平台上运行代码的经验对您来说几乎一文不值。

超线程是Intel同时多线程(SMT)的实现。通常,SMT几乎总是有益的(这就是为什么它通常被启用的原因),除非您的应用程序受到CPU的限制。如果您确信您的应用程序是CPU绑定的,那么请禁用SMT。否则(您的应用程序受IO限制或无法完全饱和内核),请保持启用状态。

在Linux下,如果i7上有4个繁忙线程,则会将每个线程放在不同的内核上。如果磁芯的另一半空闲,则性能应相同。如果您正在运行另一个程序,那么让超线程运行额外的程序还是切换上下文更好,这是有争议的。(我怀疑越少的上下文切换越好)

一个常见的错误是假设如果使用8个线程而不是4个线程,那么速度将是原来的两倍。它可能只是稍微快一点(在这种情况下,它可能仍然是值得的)或者稍微慢一点(在这种情况下,将程序限制为4个线程),我发现使用双倍线程的例子稍微快一点。嗯,这都是一个测试的问题,以找到最佳的数字,并使用许多

我唯一能看到您需要关闭HT的时候是您无法控制应用程序的行为,并且使用4个线程的速度更快。

您声明:

我知道我不应该使用超过4个工作过程来获得下降性能

这不一定是真的!下面是一个我发现在启用HT的i7-3820上运行的示例。我运行的所有代码都是C++。考虑到我需要运行8个不同的程序(虽然相同)。我尝试了以下两种运行这些代码的方法:

  • 一次只能同时运行4个独立的线程。这4个线程完成后,运行接下来的4个线程(4 x 2=8个线程)
  • 同时将所有8个线程作为单独的线程运行(8 x 1=总共8个)
  • 正如您所看到的,这两个场景实现了相同的目标。但是,我发现运行时间是:

  • 每组4条螺纹1小时;总共2小时,完成所有8项
  • 8条螺纹组为1.5小时
  • 您发现,对于案例1,单个线程的完成速度更快,但总体而言,案例2的性能更好,因为您所有的工作都在更短的时间内完成。我发现启用HT后,性能通常会提高约25%

    很明显,在某些情况下,运行8个线程比运行4个线程快