我在C中编写了一个极其优化且CPU密集型的多线程代码,它在一个或多或少有限的时间空间内执行任务。在此期间,除了加载初始值和存储最终结果外,它不会冒险离开其L1缓存。所以基本上这是一个并行化的代码,它为每个添加的核心线性扩展。这是在非HT核心上发生的事情。
在带有HT的2核i5上(BIOS不允许禁用 - 无论如何这都是不切实际的解决方案)当从一个核心转到两个核心时,我得到了令人烦恼的令人沮丧的改进。我的假设是第一个线程在核心上单独运行,第二个线程与第一个线程共享核心。
Windows API中有一些函数可以检索有关可用内核和HT的信息。但是,我如何利用这些信息来确保每个核心的一个超线程只有一个线程?
答案 0 :(得分:0)
这篇文章可能会有所帮助: http://msdn.microsoft.com/en-us/magazine/cc300701.aspx#S11
请参阅“CPU亲和力”部分和“检测超线程”部分。
答案 1 :(得分:0)
操作系统将使用HT逻辑核心,无论你是否,并且结果是缓存的大小有效减半。你可以将一个线程固定到一个逻辑核心,但我怀疑它不会帮助你。你的问题只是HT的存在。你需要关掉它。