如何决定是否使用超线程

How to decide whether to use hyperthreading or not?

本文关键字:是否 超线程 决定 何决定      更新时间:2023-10-16

超线程可能会损害某些应用程序的性能,因此不应使用它。来自Microsoft网站(https://msdn.microsoft.com/en-us/library/cc615012%28BTS.10%29.aspx):

关闭BizTalk Server的超线程至关重要计算机。超线程使服务器看起来拥有更多处理器/处理器核心比它实际做的多;然而超线程处理器通常提供20%到30%的物理处理器/处理器核心的性能。BizTalk时服务器统计处理器的数量以调整其自调整算法;超线程处理器导致这些调整这对整体性能不利。

Process Lasso程序允许禁用某些进程的超线程:

您可以使用Process Lasso(免费)等程序来设置默认CPU关键进程的亲和力,因此它们的线程永远不会分配给逻辑核心。我们将此功能称为HyperThreaded Core避免

我有一些比较老的程序,可以进行很多数学计算。看到他们使用一个核心是令人沮丧的,如果他们可以使用4。我想重写它们以使用许多线程。它们使用大的连续内存块,所以缓存未命中的数量是最小的。我的问题如下:

  • 如何决定是否在应用程序中使用超线程?(如有必要,提供一些技术细节的一般指南)
  • 这是否归结为进行实验来做出最终决定
  • 如果应用程序中的超线程没有优势,如何避免它?(c++和c中的示例)

我不知道Process Lasso在"禁用超线程"方面是否有效。对于这个特定的应用程序,你能做的最好的事情就是将DLL注入系统中的每个进程,用只相当于猜测的东西调用SetProcessAffinityMask,禁用所有其他核心,希望操作系统避免调度到超线程逻辑核心。

猜测和希望,在Windows API中没有任何东西可以做到这一点。这回答了你的第三个要点。

您可以将"超线程"禁用为BIOS级别(通常)。

我无法对Microsoft关于禁用您的链接文章BizTalk的HT的建议发表评论,因为我找不到这篇文章的日期。唯一有趣的部分是关于"为逻辑处理器分配中断相关性…",这对我来说是新的。这篇文章中关于HT的唯一其他建议相当薄弱。

更重要的是:我不知道你为什么要问超线程,而你通常应该关心多线程。如果您担心多个线程争夺同一共享资源。。。然后不要在应用程序中使用线程。

幽默的一句话是:同一家公司还销售一种名为SmartTrim的产品,让人想起90年代流行的RAM倍增器。

基本上,它归结为配置执行CPU工作负载的并发线程的数量。操作系统知道超线程,会将线程分配给物理核心,直到线程用完,只有当线程数超过物理核心时,它才会开始将工作分配给逻辑核心。

要决定线程的最佳数量是物理核心还是逻辑核心的数量,衡量实际任务的性能是最好的方法。合成基准测试可以教你一些关于超线程如何工作的东西,但不会告诉你什么最适合你的特定指令组合。

控制线程数量的确切方法取决于您使用的多线程结构——如果您自己创建线程,这是显而易见的,但线程池和OpenMP等自动化并行框架也提供了调整线程数的方法。