CHI - Transaction介绍(4) - 原子操作
ATOMIC transaction是CHI来进行原子操作的一个动作。如果没有该类型传输,原子操作必须使用内存访问序列来执行。这些访问可能依赖于Exclusive read和write。Atomic操作包含了很多种,比如atomicload/store/swap/compare等
AtomicStore | ADD | 1.在发送comp或CompData响应之前,Completer必须等待所有snoop响应; | 1. returns only a completion response: 2. data size 1/2/4/8 byte; 3. 只拉低合适的BE 4. • InitialData is not returned to the Requester. | • Update location with (TxnData + InitialData). |
CLR | • Update location with (InitialData AND (NOT TxnData)). Bitwise. | |||
EOR | InitialData XOR TxnData | |||
SET | • Update location with (InitialData OR TxnData). Bitwise. | |||
SMAX | • Update location with TxnData if: — (((Signed INT) TxnData – (Signed INT) InitialData) > 0). | |||
SMIN | • Update location with TxnData if: — (((Signed INT) TxnData – (Signed INT) InitialData) < 0). | |||
UMAX | Update location with TxnData if: — (((Unsigned INT) TxnData – (Unsigned INT) InitialData) > 0). | |||
UMIN | • Update location with TxnData if: — (((Unsigned INT) TxnData – (Unsigned INT) InitialData) < 0). | |||
AtomicLoad | ADD | 1. return Data with a completion response: 但是返回的data是执行原子操作之前地址的数据; 2. data size 1/2/4/8 byte; 3. 只拉低合适的BE; 4. 读回的数据不会被cache 5. • InitialData is returned to the Requester. | • Update location with (TxnData + InitialData). | |
CLR | • Update location with (InitialData AND (NOT TxnData)). Bitwise. | |||
EOR | InitialData XOR TxnData | |||
SET | • Update location with (InitialData OR TxnData). Bitwise. | |||
SMAX | • Update location with TxnData if: — (((Signed INT) TxnData – (Signed INT) InitialData) > 0). | |||
SMIN | • Update location with TxnData if: — (((Signed INT) TxnData – (Signed INT) InitialData) < 0). | |||
UMAX | Update location with TxnData if: — (((Unsigned INT) TxnData – (Unsigned INT) InitialData) > 0). | |||
UMIN | • Update location with TxnData if: — (((Unsigned INT) TxnData – (Unsigned INT) InitialData) < 0). | |||
AtomiASwap | 1. return Data with a completion response: 但是返回的data是执行原子操作之前地址的数据; 2. data size 1/2/4/8 byte; 3. 只拉低合适的BE; 4. 读回的数据不会被cache 5. • InitialData is returned to the Requester. | 数据交换 transaction携带要交换的值下去 | ||
AtomicCompare | 1. return Data with a completion response: 但是返回的data是执行原子操作之前地址的数据; 2. data size 1/2/4/8 byte; 3. 只拉低合适的BE; 4. 读回的数据不会被cache 5. • InitialData is returned to the Requester. | 数据比较 transaction携带要比较的值下去 |