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