2014-10-31 60 views
2

我碰到一個建議來抓線程不訪問相同的緩存行,我真的不能明白爲什麼,還同時做對題目我這個問題就圍繞一個搜索: Multiple threads and CPU cache 的其中一個回答提示:線程訪問同一緩存行的

你只是想避免試圖同時訪問位於同一緩存行

我看到它,內存高速緩存存儲的網頁快速的方式進行數據兩個線程從過程中訪問,並且如此這裏說的:http://en.wikipedia.org/wiki/Thread_%28computing%29#How_threads_differ_from_processes

線程共享它們的地址空間

它不應該是一個問題的兩個線程,因爲如果一個網頁是在緩存和線程試圖訪問訪問同一緩存行的無論其他線程如何,內存都會獲得緩存命中。

我聽說過有關避免線程在幾個不同場合訪問相同緩存行的爭論,所以它不能成爲一個神話。我在這裏錯過了什麼?

回答

2

在大多數(可能所有但我沒有詳盡的硬件知識)多核CPU中,當一個內核嘗試寫入相應的內存時,緩存將鎖定當前訪問的行。所以其他內核試圖訪問相同的緩存行將被等待。

只要它是隻讀的(或者不常更新),你可以在線程之間共享相同的數據,但是如果你一直寫入它,隱藏的訪問序列化將產生相當於在同一個核心上運行所有線程的性能由於緩存鎖定延遲而變得更糟)。

+0

感謝您的回答是可用的,當我使用它們駐留在同一個C上的用戶空間線程PU還是兩個非用戶線程駐留在同一個CPU上時,沒有考慮到這個問題? – 2014-10-31 13:43:23

+0

操作系統會自動將您的線程分配給不同的內核(除非您強制其使用相同的內核)。這就是在多核架構中使用線程的關鍵。 OTOH,如果性能不是問題,爲什麼還要首先使用線程呢? :) – 2014-10-31 13:46:24

3

的,爲什麼不推薦說話的readers-writer problem速度優化的多核CPU

上運行時,在這種情況下,如果可能會更快,以避免cache lockLOCK# signal),並通過運行抑制來維持cache coherence需要cache line bouncing讀者/作家在不同的緩存線上。

你是對的,它不是一個必須避免的問題,因爲有些東西會失效。這只是一個建議的速度優化。

關於內部處理器緩存的思考是一個極端的低級別速度優化案例。對於大多數典型的編程任務的速度瓶頸在於硬件電路之外,以下Intel Guide for Developing Multithreaded Applications是剛夠


又見

的 「緩存線」 的一些ilustrations在Intel® 64 and IA-32 Architectures Software Developer’s Manual

enter image description here

enter image description here