CHI atomics 传输——CHI(6)

原子事务,指的是此事务就像原子一样是不可分割的,要么所有操作全部完成,要么全部不执行,不存在执行部分操作的情况。

ALU (Arithmetic Logic Unit) 算术逻辑单元,ALUHNSN

AddrData:当前memory中的数据

TxnData:与原子请求一起发送的数据

完整的原子操作结构如下:

Requester 发送原子操作到 ICN
ALU HN SN 内,因此由他们执行原子操作
根据操作, ICN 可以将地址的原始数据返回给 requester


Requester REQ channel 发送 atomic 操作
Atomic操作有2种 类型
        1. Request 为AtomicStore ,返回 DBIDResp + Comp ,或返回CompDBIDResp        
        2. Request 为AtomicLoad、 AtomicSwap , or AtomicCompar e ,返回 DBIDResp + Read data

Requester 发送write data和使能信号

如果WriteData表示需要Tag Match,则Slave在完成Tag Match操作后返回Tag Match响应;若Slave不支持或不执行Tag Match操作,则允许Slve在收到WriteData之前返回Tag Match响应

Atomic transaction with snoops and data return

Atomic transaction with snoops and widthout data return

### 安装 Atomics 库或工具 对于不同编程环境下的 `Atomics` 使用,具体安装方法有所不同。以下是针对几种常见场景的说明: #### JavaScript 中的 Atomics 对象 JavaScript 的 `Atomics` 是内置全局对象的一部分,并不需要单独安装。该对象提供了一组静态方法用于执行原子操作,适用于共享内存上的整型数组[^1]。 ```javascript // 创建一个SharedArrayBuffer并初始化Int32Array视图 const sab = new SharedArrayBuffer(1024); const int32 = new Int32Array(sab); // 执行加法原子操作 Atomics.add(int32, 0, 42); // 在索引位置0处增加42 ``` #### Python 中 Atomos 类似的库 如果提到Python环境下类似的并发原语,通常指的是类似于 `threading`, `multiprocessing` 模块所提供的同步原语以及第三方库如 `atomicl` 提供的功能。然而并没有名为 “Atomics”的官方包。如果有特定的需求,可能需要寻找合适的替代方案或者自定义实现[^4]。 #### C++ 中的 Atomics 支持 在C++标准库中已经包含了 `<atomic>` 头文件,它提供了多种模板类来支持硬件级别的原子操作。因此也不必额外安装其他软件包即可使用原子类型和函数[^5]。 ```cpp #include <atomic> std::atomic<int> my_atomic_var{0}; my_atomic_var.store(42); // 存储新值 int old_value = my_atomic_var.exchange(84); // 替换旧值为84并返回之前的值 bool success = my_atomic_var.compare_exchange_weak(old_value, 168); // CAS操作 ``` #### Rust 中的 Atomics 功能 Rust 编程语言自带对原子操作的支持,位于标准库的标准模块 `std::sync::atomic` 下面。这意味着只要引入相应的 crate 版本就可以直接利用其丰富的特性而无需担心依赖项管理问题[^2]。 ```rust use std::sync::Arc; use std::sync::atomic::{AtomicUsize, Ordering}; let value = Arc::new(AtomicUsize::new(0)); value.fetch_add(1, Ordering::SeqCst); // 原子增量运算 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值