簡體   English   中英

在C ++中訪問原子變量的速度有多快

[英]How fast is access to atomic variables in C++

我的問題是使用C ++ 0x actomic <>類訪問C ++中的原子變量的速度有多快? 什么在緩存級別下降。 假設一個線程只是在讀它,它是否需要轉到RAM或它只能從它正在執行的核心的緩存中讀取? 假設架構是x86。

我特別感興趣的是知道一個線程是否只是從它讀取,而當時沒有其他線程正在寫入,懲罰將與讀取正常變量相同。 如何訪問原子變量。 每個讀取隱含都涉及寫入,比如在比較和交換中嗎? 原子變量是使用比較和交換實現的嗎?

答案並不像你想象的那么簡單。 它取決於確切的CPU模型,也取決於具體情況。 最糟糕的情況是,當您需要對變量執行讀取 - 修改 - 寫入操作並且存在沖突時(沖突究竟是什么與CPU模型相關,但最常見的是當另一個CPU訪問同一緩存行時) 。

另請參見.NET或Windows同步基元性能規范

如果你想要原始數字,Anger Fog的優化手冊中的數據列表應該是有用的,同樣, intels手冊還有一些部分詳細說明了多核系統上內存讀/寫的延遲,其中應該包括由原子寫入所需的總線鎖定。

Atomics使用特殊的體系結構支持來獲得原子性,而不必強制所有讀/寫一直到主內存。 基本上,允許每個核心探測其他核心的緩存,因此他們可以通過這種方式找到其他線程操作的結果。

確切的性能取決於架構。 在x86上,許多操作已經開始是原子的,因此它們是免費的。 我已經看到了從10到100個周期的數字,具體取決於架構和操作。 從透視角度來看,從主存儲器中讀取的任何內容都是3000-4000個周期,因此原子數比幾乎所有平台上的內存都要快得多。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM