设置亲和力会导致执行时间增加

时间:2016-08-25 09:46:56

标签: linux multithreading

我正在16核计算机上运行16个线程的多线程程序(包含大量原子操作)。当我设置线程的亲和性使得每个线程在唯一的cpu上运行时,与非关联版本的程序相比,程序的执行时间增加。使用perf我可以看到,当使用线程核心亲和性时,缓存未命中率从10%增加到30%,这可能是执行时间增加的原因。你能否谈谈如何使用亲和力导致更多的缓存未命中?

1 个答案:

答案 0 :(得分:2)

  

请问一下如何使用亲和力可以导致更多的缓存未命中?

因为这些是 CPU缓存,即每个处理器个人的一组缓存。 例如,两个线程读取相同的数据:

  • 如果它们在同一个核心P1上,T1会错过P1的所有级别的缓存并在内存中读取。数据在缓存中。 T2读取并点击P1的缓存。乌拉!
  • 如果它们位于不同的核心P1和P2上,则T1会错过P1的所有级别的缓存并在内存中读取。数据位于P1的缓存中。 T2错过了P2的所有级别的缓存并在内存中读取。

请看 What is a cache miss