0

我正在用 C 编写一个极其优化且 CPU 密集型的多线程代码,它在或多或少有限的时间空间内执行任务。在此期间,除了加载初始值和存储最终结果之外,它不会冒险离开其 L1 缓存。所以本质上这是一个并行化的代码,它为每个添加的核心线性扩展。这就是在非 HT 内核上发生的情况。

在我的带有 HT 的 2 核 i5 上(BIOS 不允许禁用它 - 无论如何这是一个不切实际的解决方案),从一个核心变为两个核心时,我得到了令人讨厌的令人沮丧的改进。我的假设是第一个线程单独运行在一个核心上,第二个线程与第一个共享核心。

Windows API 中有一些函数可以检索有关可用内核和 HT 的信息。但是我如何利用这些信息来确保每个核心的一个超线程上只有一个线程?

4

2 回答 2

0

这篇文章可能会有所帮助:http: //msdn.microsoft.com/en-us/magazine/cc300701.aspx#S11

请参阅“CPU 关联性”部分和“检测超线程”部分。

于 2012-07-13T14:37:19.773 回答
0

无论您是否使用,操作系统都将使用 HT 逻辑内核,其结果是缓存的大小有效减半。您可以将线程固定到逻辑核心,但我怀疑它对您没有帮助。您的问题仅仅是 HT 的存在。您确实需要将其关闭。

于 2012-07-14T17:57:20.040 回答