今天我對並行編程課的教授有了一個不同的理解,關於什麼是「虛假分享」。我的教授說的沒什麼意義,所以我馬上指出了。她認爲「虛假分享」會導致程序結果出現錯誤。什麼是「虛假分享」?如何重現/避免它?
我說過,當不同的內存地址分配給同一個緩存行時發生「錯誤共享」,將數據寫入其中一個會導致另一個緩存被踢出緩存。如果處理器在兩個虛假共享地址之間寫入並轉向,則它們都不能停留在高速緩存上,因此所有的操作都將導致DRAM的存取。
這是我目前爲止的意見。事實上,我並不確定我所說的是什麼......如果我有誤解,請指出。
所以有一些問題。緩存被假定爲64字節對齊,4路組關聯。
- 是否有可能由兩個以上的64字節分隔的地址是「假分享」?
- 單線程程序是否可能遇到「錯誤共享」問題?
- 重現「錯誤分享」的最佳代碼示例是什麼?
- 一般來說,應該注意避免程序員「虛假分享」?