2

在此处搜索“线程亲和性”的答案时,我看到很多人对此很感兴趣,但几乎没有理由这样做,因为它可能会获得稳定的 QueryPerformanceTimer 结果。

假设现代操作系统和具有现代 4-6 核 CPU 的现代 2-4 插槽工作站/服务器类机器,有什么好的理由认为他们比操作系统的调度程序更了解?在现实世界中是否存在更多地控制广告亲和力是正确的做法?可以展示什么样的性能优势?

上次我看到一个在某处设置线程关联的非常好的案例(例如,它得到了显示系统性能真正显着改进的具体结果的支持),这与 Win2K 设备驱动程序有关。但是我多年来没有见过这样的事情,所以当有人告诉我他们需要控制线程亲和力(但不是为什么)时,这些天我非常怀疑......但很好奇以其他方式展示。

4

5 回答 5

1

在操作系统内核中,有时在内核模式驱动程序中,您需要在每个 CPU 上执行相同的操作(例如更新系统寄存器)。您可以在单个线程的循环中执行此操作,从而在每次迭代中更改亲和性。

于 2012-02-18T07:27:37.857 回答
1

我用它将线程分配给核心;例如,在模拟中,您完全在一个内核上完成物理,并允许在另一个内核上执行其余的计算。如果您处于了解硬件的紧凑环境中,那么能够控制这一点是有意义的。

当然,配置这个需要在每个系统上完成,所以默认情况下我让操作系统决定在哪个内核上运行,但保留限制内核使用的选项。

于 2011-12-14T17:38:34.013 回答
1

主要原因是如果你有一些严重依赖缓存的东西。操作系统调度程序不一定会考虑到您可能喜欢的程度。

于 2011-08-05T15:45:34.730 回答
0

对于台式机来说,这是完全没有必要的。

但我可以看到一些有帮助的应用程序。例如,如果在其上运行的应用程序没有更改,CPU 缓存就会喜欢它。

另一种可能性是你有一个关键任务——你给它一个完整的 CPU,而其他任务使用其余的 CPU。

或者相反:你有一些低优先级的任务,你把它们全部放在一个 CPU 上,然后让其他的空闲来处理更重要的任务(使用进程优先级会给你带来大部分好处而没有亲和力,但我可以想象一些内存很重不会的情况下)。

于 2011-08-05T14:18:50.623 回答
0

我同意在大多数情况下最好让 CPU 来解决这个问题。但是,据我所知,使用线程亲和性的最常见原因是当您需要良好的缓存依赖性时。在多个 CPU 系统中,当一个特定的 CPU 为自己单独缓存某些东西并且如果相同的东西已经缓存在其他 CPU 中,那么我相信它可以在另一个 CPU 上自动失效。因此,如果特定线程不断更改其执行的 CPU,则缓存命中率将太低。所以在这种情况下,我认为程序员更好地判断 COU 亲和力是有意义的。我还认为 Ariel 上述关于确保关键任务不断获得 CPU 而不会限制其他低优先级进程的观点也是有道理的。

于 2012-02-18T06:22:39.497 回答