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的区别