atomic and exclusive operation
原子操作(atomic operation)指的是由多步操作組成的一個操作,也就是一個指令包含了至少兩步操作,比如自加操作( i++ ),就是先從內存讀一個地址(步驟1 load),然后將數據自加1 (步驟2 ALU做加法運算),再寫回內存(步驟3 store)。對同一個資源(比如訪問DDR的一個相同地址)的原子操作處理過程中,不允許被打斷。原子操作的正確實施必須由硬件邏輯來保證,一般在距離片外內存(DDR)較近的模塊實施,比如NoC,LLC等,因為這樣才能發揮原子操作的性能優勢。比如在LLC中實施,那么就需要在LLC中增加一個小的ALU來實現 自加/自減/異或 這樣的操作。 同時,LLC需要保證在 步驟1 load 到 步驟2 store 這段時間內不能插入任何其他的訪問此地址的 request,保證原子性。atomic 肯定會成功,因為這是需要 硬件來強保證的。
atomic 一般會和exclusive進行比較。exclusive 是軟件行為,有可能會失敗。ALU的操作 是 需要在core內完成。對于自加操作,core先發出一個read request,帶exclusive 信號,NoC / LLC 支持exclusive的邏輯處 在收到此read request的時候 將exclusive bit置1 (此時時間記為 T1 ),read request 正常返回 read data 給 core,此address的exclusive bit依然為1,core在收到 read data后,自己做自加操作,然后再發出一個write request,NoC / LLC 在收到write request的時候,去check T1 到這段時間內 是否 有 其他訪問此地址的request,如果有,那么此次exclusive write 失敗,返回error resp給core,core等待時機再次重新發送read request。NoC/LLC 處 在 exclusive bit為1的情況下,是不能阻塞 其他core 發出相同地址的request的。
AXI協議中,使用 AxLOCK signals select exclusive access, and the RRESP and BRESP signals indicate the success or failure of the exclusive access read or write respectively.
Atomic需要硬件資源ALU的支持,但相對于exclusive有很大的性能提升。 假如master (如CPU core)需要實現這樣的操作:從memory(如LLC/DDR)的一個地址讀取數據,然后對數據進行加1操作,然后再把加1之后的數據寫入原地址位置,這個其實就是我們經常會聽到的 read modify write操作的一種。在不使用atomic的情況下,我們需要 先從memory把數據load 到CPU core,然后在CPU core的ALU中執行 ADD加1操作,然后再把新數據 寫入 memory。如下圖,CPU core 和 memory之間 需要4次交互;假如我們支持了atomic transaction,在memory處增加了ALU邏輯,那么就只需要兩次 交互 就可以完成。考慮到一般情況下master端 離 memory端都比較遠,故atomic可以大大降低上面整個操作的延時。
原子操作主要有以下幾種
Read modify write (讀改寫) :比如自加操作( i++ ),就是先從內存讀一個地址(步驟1 load),然后將數據自加1 (步驟2 ALU做加法運算),再寫回內存(步驟3 store)。除了自加,ALU還可以做 減法、XOR等單操作數的簡單運算。
test-and-set-lock (檢查并設置TSL) x86匯編指令BTS,意味Bit Test and Set,就是一條原子操作的CPU指令。它把由操作數指定地址的鎖的狀態保存入CF寄存器,然后鎖被設置為1.
compare-and-swap (比較并交換,CAS)
參考 https://zh.wikipedia.org/wiki/Read-modify-write
總結
以上是生活随笔為你收集整理的atomic and exclusive operation的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Arduino作为编程器读写BIOS、b
- 下一篇: dlp技术(dlp技术和单片lcd的区别