2016-08-25 34 views
1

我正在16核心機器上運行16個線程的多線程程序(包含大量的原子操作)。當我設置線程的關聯性,以便每個線程運行在一個獨特的cpu上時,程序的執行時間與非關聯版本的程序相比增加。使用perf我可以看到,當使用線程核心關聯時,緩存未命中從10%增加到30%,這可能是執行時間增加的原因。您能否介紹一下如何使用關聯可以導致更多的緩存未命中?設置親和性導致執行時間增加

回答

2

您能否介紹一下如何使用親緣關係會導致更多緩存未命中?

因爲這些是CPU高速緩存即一組個體的高速緩存的每個處理器。 例如兩個線程讀取相同的數據:

  • 如果他們在相同的核心P1,T1錯過P1的高速緩存的所有級別,並在內存中讀取。數據在緩存中。 T2讀取並打到P1的緩存。歡呼!
  • 如果它們位於不同核心P1和P2上,則T1錯過P1的所有級別的高速緩存並在內存中讀取。數據在P1的緩存中。 T2錯過P2的所有級別的緩存並在內存中讀取。

請看 What is a cache miss