【发布时间】:2015-11-06 20:18:25
【问题描述】:
超线程可能会损害某些应用程序的性能,因此不应使用它。来自微软网站 (https://msdn.microsoft.com/en-us/library/cc615012%28BTS.10%29.aspx):
关闭 BizTalk Server 的超线程至关重要 电脑。超线程使服务器看起来有更多 处理器/处理器内核比它实际做的;然而 超线程处理器通常提供 20% 到 30% 的 物理处理器/处理器内核的性能。当 BizTalk 服务器统计处理器的数量来调整它的自我调整 算法;超线程处理器导致这些调整 不利于整体性能。
Process Lasso 程序允许对某些进程禁用超线程:
您可以使用 Process Lasso(免费)等程序来设置默认 CPU 关键进程的亲和力,因此它们的线程永远不会得到 分配给逻辑核心。我们将此功能称为超线程核心 回避。
我有一些执行大量数学计算的旧程序。如果他们可以使用 4 个核心,看到他们使用一个核心令人沮丧。我想重写它们以使用多个线程。它们使用大的连续内存块,因此缓存未命中的数量最少。我的问题如下:
- 如何决定是否在您的应用程序中使用超线程? (必要时提供一些技术细节的一般指导)
- 是否归结为进行实验以做出最终决定?
- 如果没有优势,如何避免应用程序中的超线程? (c++ 和 c 中的示例)
【问题讨论】:
-
超线程(在某种程度上)是 CPU 内部的概念。您听起来更像是在讨论一般的线程,而不是专门为超线程定制代码,因为超线程可以被认为是“假”核心。
-
你的意思是多线程吗?
-
是的。超线程是某些 CPU 的技术内容。多线程是一种编程并发执行代码的方式。在多线程上下文(或多进程上下文)中,它显然取决于所执行的处理类型,您没有提供详细信息。
-
我的意思是超线程。我在某处读到它并不总是好的,你可以避免它。但我不知道更多细节。
-
所以我不明白。您无法决定使用或不使用超线程,因为它被操作系统视为标准 CPU。作为系统管理员,您可以激活或不激活 HT,但作为程序员,您必须依靠可用的 CPU(实数或 HT 的)来决定(比如说)执行代码的线程数。
标签: c++ c multithreading performance hyperthreading