Skip to content
版 本

AtomicMax

产 品 支 持 情 况

产 品

是 否 支 持

Ascend 950PR/Ascend 950DT

Atlas A3 训 练 系 列 产 品/Atlas A3 推 理 系 列 产 品

x

Atlas A2 训 练 系 列 产 品/Atlas A2 推 理 系 列 产 品

x

Atlas 200I/500 A2 推 理 产 品

x

Atlas 推 理 系 列 产 品AI Core

x

Atlas 推 理 系 列 产 品Vector Core

x

Atlas 训 练 系 列 产 品

x

功 能 说 明

调 用 该 接 口 后,可 在 指 定GM地 址 上 进 行 原 子 取 大 操 作。

函 数 原 型

Text
template <typename T>
__aicore__ inline T AtomicMax(__gm__ T *address, T value)

参 数 说 明

表 1 模 板 参 数 说 明

参 数 名

描 述

T

操 作 数 数 据 类 型。

Ascend 950PR/Ascend 950DT,支 持 的 数 据 类 型 为:int32_t/uint32_t/float/int64_t/uint64_t

表 2 参 数 说 明

参 数 名

输 入/输 出

描 述

address

输 入

输 入GM的 地 址。

value

输 入

标 量 值,支 持 数 据 类 型 和address指 向 的 数 据 类 型 保 持 一 致。

返 回 值 说 明

GM地 址 上 做 原 子 操 作 前 的 数 据。

约 束 说 明

原 子 操 作 涉 及 标 量 计 算,如 果 标 量 计 算 单 元 和 搬 运 单 元(MTE2/MTE3)在 读 写GM时 存 在 数 据 依 赖,开 发 者 需 要 根 据 实 际 情 况 插 入 同 步。

调 用 示 例

更 多 样 例 请 参 见ScalarAtomicOperations样 例

Text
// 传 入 全 局 数 据 地 址,初 始 化dstGlobal与dstLocal
dstGlobal.SetGlobalBuffer(reinterpret_cast<__gm__ T *>(dstGm), dataSize);

LocalTensor<T> dstLocal = inQueueX.AllocTensor<T>();
int32_t value = 2;
int32_t a = AscendC::AtomicMax(reinterpret_cast<__gm__ int32_t *>(dstGm), value);
// 先 执 行 完 原 子 操 作 之 后 才 能 进 行 搬 运 操 作,有 数 据 依 赖
event_t eventIdSToMte2 = static_cast<event_t>(GetTPipePtr()->AllocEventID<HardEvent::S_MTE2>());
// 手 动 插 入MTE2等 待Scalar的 同 步
SetFlag<HardEvent::S_MTE2>(eventIdSToMte2);
WaitFlag<HardEvent::S_MTE2>(eventIdSToMte2);
DataCopy(dstLocal, dstGlobal, dataSize);
// ...

假 设 上 述 函 数 在3个 核 上 执 行,核1、核2、核3依 次 调 度,结 果 示 例 如 下:

Text
原GM数 据dst: [1,1,1,1,1,...,1] 
核1:
原 子 计 算 后GM数 据dst: [2,1,1,1,1,...,1] 
返 回 值 a: 1
核2:
原 子 计 算 后GM数 据dst: [2,1,1,1,1,...,1] 
返 回 值 a: 2
核3:
原 子 计 算 后GM数 据dst: [2,1,1,1,1,...,1] 
返 回 值 a: 2

免 责 声 明:本 站 内 容 由 asc-devkit 仓 master 分 支 自 动 编 译 生 成,属 于 持 续 开 发 版 本,可 能 存 在 缺 陷,仅 供 预 览 与 参 考。如 需 稳 定 及 商 用 资 料,请 查 阅 官 方 昇 腾 社 区