2011-05-29 144 views
2

我有一個簡單的多線程應用程序用於我的多核系統。這個應用程序有一個並行區域,其中沒有線程寫入給定的內存地址,但有些可能會同時讀取。同時訪問共享內存是否會導致性能下降?

即使沒有使用鎖定,是否仍會存在與多個線程訪問相同內存相關的某些類型的開銷或性能命中?如果是這樣,爲什麼?它可以產生多大的影響,可以做些什麼?

回答

1

這可能取決於正在使用的特定高速緩存同步協議,但大多數現代CPU都支持在多處理器高速緩存中共享相同的高速緩存線,前提是沒有寫入高速緩存行的活動。也就是說,確保您將分配與高速緩存行大小對齊;如果不這樣做,可能正在寫入的數據可能與只讀數據共享相同的緩存行,導致在髒緩存行在其他處理器上刷新時出現性能問題(錯誤共享)。

+0

我有一個2布爾數組的對象。多個線程可以從其中一個數組讀取,一個線程可以寫入另一個線程。如果寫入第二個數組,則緩存系統可能會強制緩存行被重新加載,即使第一個數組沒有改變。這是這個想法嗎? – ryguy 2011-05-29 00:33:12

+0

沒錯。你會想要填充它們,所以它們不在同一個緩存行中。請注意,高速緩存行大小因處理器型號而異,因此最好使用'posix_memalign'或堆上的某些內容獨立分配這些數組 – bdonlan 2011-05-29 00:37:08

0

我會說不會有。然而,當你有多個作者到相同的引用時,問題就出現了。

相關問題