SetCtrlSpr(ISASI)
产 品 支 持 情 况
| 产 品 | 是 否 支 持 |
|---|---|
Ascend 950PR/Ascend 950DT | √ |
Atlas A3 训 练 系 列 产 品/Atlas A3 推 理 系 列 产 品 | √ |
Atlas A2 训 练 系 列 产 品/Atlas A2 推 理 系 列 产 品 | √ |
Atlas 200I/500 A2 推 理 产 品 | x |
Atlas 推 理 系 列 产 品 AI Core | x |
Atlas 推 理 系 列 产 品 Vector Core | x |
Atlas 训 练 系 列 产 品 | x |
功 能 说 明
头 文 件 路 径 为:"basic_api/kernel_operator_common_intf.h"。
对CTRL寄 存 器(控 制 寄 存 器)的 特 定 比 特 位 进 行 设 置。
函 数 原 型
C++
template <int8_t startBit, int8_t endBit>
__aicore__ static inline void SetCtrlSpr(int64_t value)
参 数 说 明
表 1 模 板 参 数 说 明
| 参 数 名 | 描 述 |
|---|---|
| startBit | 起 始 比 特 位 索 引。 |
| endBit | 终 止 比 特 位 索 引。 |
表 2 参 数 说 明
| 参 数 名 | 输 入/输 出 | 描 述 |
|---|---|---|
| value | 输 入 | 起 止 比 特 位 上 新 设 置 的 值。 |
表 3 Ascend 950PR/Ascend 950DT常 用CTRL寄 存 器 比 特 位 说 明
| CTRL寄 存 器 比 特 位 | 功 能 | 默 认 值 | 配 合 使 用 的API |
|---|---|---|---|
| CTRL[8:6] | 用 于 控 制 数 据 从L0C Buffer/Unified Buffer/L1 Buffer搬 运 至Global Memory时 原 子 操 作 的 启 用 及 数 据 类 型 选 择。 • 3'b000:不 开 启 原 子 操 作; • 3'b001:开 启 原 子 操 作,数 据 类 型 为float; • 3'b010:开 启 原 子 操 作,数 据 类 型 为half; • 3'b011:开 启 原 子 操 作,数 据 类 型 为int16_t; • 3'b100:开 启 原 子 操 作,数 据 类 型 为int32_t; • 3'b101:开 启 原 子 操 作,数 据 类 型 为int8_t; • 3'b110:开 启 原 子 操 作,数 据 类 型 为bfloat16_t。 | 3'b000 | 不 涉 及 |
| CTRL[10:9] | 用 于 控 制 原 子 操 作 的 类 型,仅 在CTRL[8:6]开 启 原 子 操 作 时 生 效。 • 2'b00:选 择ADD操 作; • 2'b01:选 择MAX操 作; • 2'b10:选 择MIN操 作。 | 2'b00 | 不 涉 及 |
| CTRL[45] | 用 于 控 制 左 右 矩 阵 数 据 做Mmad计 算 时 的 处 理 方 式。 • 1'b0:按 照 原 数 据 类 型 进 行 处 理; • 1'b1:左 右 矩 阵 数 据 均 为fp8_e4m3fn_t时,数 据 视 为hifloat8_t进 行 矩 阵 乘 法 计 算。其 他 场 景 按 照 原 数 据 类 型 进 行 处 理。 | 1'b0 | 不 涉 及 |
| CTRL[48] | 用 于 控 制 浮 点 数 计 算 和 浮 点 数 精 度 转 换 时 的 饱 和 模 式,仅 在CTRL[60]开 启 时 生 效。 • 1'b0:饱 和 模 式,inf输 出 会 被 饱 和 为±MAX,NaN输 出 会 被 饱 和 为0; • 1'b1:非 饱 和 模 式,inf/NaN保 持 原 输 出。 该 控 制 位 仅 支 持 如 下 数 据 类 型: • 浮 点 数 计 算 时 支 持half数 据 类 型; • 浮 点 数 精 度 转 换 时 支 持 如 下 数 据 类 型:hifloat8_t、fp8_e8m0_t、fp8_e5m2_t、fp8_e4m3fn_t、half、bfloat16_t。 | 1'b0 | 配 合 使 用 的API: • 矢 量 计 算API • 原 子 操 作API • 精 度 转 换 指 令 使 用 约 束: • 需 要 满 足 数 据 类 型 限 制。 • 执 行 原 子 操 作 过 程 中,如 果 需 要 重 新 配 置 该 控 制 位,需 要 调 用DataCacheCleanAndInvalid先 清 除 当 前Cache Line状 态 并 将 当 前 数 据 写 出,防 止 饱 和 模 式 变 更 影 响 当 前 数 据。具 体 调 用 示 例 可 参 考原 子 操 作 中,half类 型 配 置 全 局 非 饱 和 模 式 示 例。 |
| CTRL[50] | 用 于 控 制 浮 点 数 精 度 转 换 时 的NaN饱 和 模 式,在CTRL[48]设 置 为 饱 和 模 式 时 生 效。 • 1'b0:NaN输 出 会 被 转 换 为0.0; • 1'b1:NaN输 出 会 保 持NaN。 该 控 制 位 仅 支 持 如 下 数 据 类 型: fp8_e8m0_t、fp8_e5m2_t、fp8_e4m3fn_t。 | 1'b0 | 精 度 转 换 指 令(需 要 满 足 数 据 类 型 限 制)。 |
| CTRL[53] | 用 于 控 制 整 数 计 算 指 令 的 饱 和 模 式。 • 1'b0:截 断 模 式,溢 出 值 按 目 标 数 据 类 型 位 数 截 断,保 留 低 位,舍 弃 高 位; • 1'b1:饱 和 模 式,溢 出 值 饱 和 到±MAX。 | 1'b0 | 矢 量 计 算API(输 入 输 出 数 据 类 型 为 整 数)。 |
| CTRL[59] | 用 于 控 制 浮 点 数 转 整 数 或 整 数 转 整 数 时 的 精 度 转 换 饱 和 模 式,仅 在CTRL[60]开 启 时 生 效。 • 1'b0:饱 和 模 式:溢 出 值 饱 和 到±MAX; • 1'b1:截 断 模 式:溢 出 值 按 目 标 数 据 类 型 位 数 截 断,保 留 低 位,舍 弃 高 位。 | 1'b0 | 精 度 转 换 指 令。 |
| CTRL[60] | 用 于 控 制 饱 和 模 式 的 全 局 生 效 方 式。 • 1'b0:单 指 令 设 置 饱 和; • 1'b1:全 局 设 置 饱 和。 | 1'b1 | 该 控 制 位 可 与Reg矢 量 计 算API Cast配 合 使 用,或 与CTRL[48]、CTRL[59]配 合 使 用,具 体 配 置 信 息 参 考表6。 |
表 4 Atlas A3 训 练 系 列 产 品/Atlas A3 推 理 系 列 产 品 常 用CTRL寄 存 器 比 特 位 说 明
| CTRL寄 存 器 比 特 位 | 功 能 | 默 认 值 | 配 合 使 用 的API |
|---|---|---|---|
| CTRL[48] | 用 于 控 制 浮 点 数 计 算 和 浮 点 数 精 度 转 换 时 的 饱 和 模 式。 • 1'b0:饱 和 模 式,inf输 出 会 被 饱 和 为±MAX, NaN输 出 会 被 饱 和 为0; • 1'b1:非 饱 和 模 式,inf/NaN保 持 原 输 出。 该 控 制 位 仅 支 持 如 下 数 据 类 型: • 浮 点 数 计 算 时 支 持half、bfloat16_t数 据 类 型; • 浮 点 数 精 度 转 换 时 支 持 如 下 数 据 类 型:half、bfloat16_t。 | 1'b0 | 不 涉 及 |
注:针 对Atlas A3 训 练 系 列 产 品/Atlas A3 推 理 系 列 产 品,推 荐 使 用SetSaturationFlag和GetSaturationFlag来 设 置 和 获 取CTRL[48]以 控 制 饱 和 模 式。
表 5 Atlas A2 训 练 系 列 产 品/Atlas A2 推 理 系 列 产 品 常 用CTRL寄 存 器 比 特 位 说 明
| CTRL寄 存 器 比 特 位 | 功 能 | 默 认 值 | 配 合 使 用 的API |
|---|---|---|---|
| CTRL[48] | 用 于 控 制 浮 点 数 计 算 和 浮 点 数 精 度 转 换 时 的 饱 和 模 式。 • 1'b0:饱 和 模 式,inf输 出 会 被 饱 和 为±MAX, NaN输 出 会 被 饱 和 为0; • 1'b1:非 饱 和 模 式,inf/NaN保 持 原 输 出。 该 控 制 位 仅 支 持 如 下 数 据 类 型: • 浮 点 数 计 算 时 支 持half、bfloat16_t数 据 类 型; • 浮 点 数 精 度 转 换 时 支 持 如 下 数 据 类 型:half、bfloat16_t。 | 1'b0 | 不 涉 及 |
注:针 对Atlas A2 训 练 系 列 产 品/Atlas A2 推 理 系 列 产 品,推 荐 使 用SetSaturationFlag和GetSaturationFlag来 设 置 和 获 取CTRL[48]以 控 制 饱 和 模 式。
表 6 Ascend 950PR/Ascend 950DT饱 和 模 式 全 局 或 单 指 令 生 效 配 置 表
| 全 局 开 启 位 | 控 制 位 | 功 能 描 述 |
|---|---|---|
| CTRL[60] = 1'b0 | Reg矢 量 计 算Cast API的trait模 板 参 数 中satMode设 置 为SatMode::NO_SAT。 | 单 指 令 非 饱 和 模 式。 |
| CTRL[60] = 1'b0 | Reg矢 量 计 算Cast API的trait模 板 参 数 中satMode设 置 为SatMode::SAT。 | 单 指 令 饱 和 模 式。 |
| CTRL[60] = 1'b1 | CTRL[48] = 1'b1 | 全 局 非 饱 和 模 式(浮 点 数 计 算 和 浮 点 数 精 度 转 换)。 |
| CTRL[60] = 1'b1 | CTRL[48] = 1'b0 | 全 局 饱 和 模 式(浮 点 数 计 算 和 浮 点 数 精 度 转 换)。 |
| CTRL[60] = 1'b1 | CTRL[59] = 1'b1 | 全 局 非 饱 和 模 式(浮 点 数 转 整 数 或 整 数 转 整 数 时 的 精 度 转 换)。 |
| CTRL[60] = 1'b1 | CTRL[59] = 1'b0 | 全 局 饱 和 模 式(浮 点 数 转 整 数 或 整 数 转 整 数 时 的 精 度 转 换)。 |
返 回 值 说 明
无
约 束 说 明
- Ascend 950PR/Ascend 950DT仅 支 持CTRL[8:6]、CTRL[10:9]、CTRL[45]、CTRL[48]、CTRL[50]、CTRL[53]、CTRL[59]、CTRL[60]比 特 位。
- Atlas A3 训 练 系 列 产 品/Atlas A3 推 理 系 列 产 品 仅 支 持CTRL[48]比 特 位。
- Atlas A2 训 练 系 列 产 品/Atlas A2 推 理 系 列 产 品 仅 支 持CTRL[48]比 特 位。
- Ascend 950PR/Ascend 950DT对 于CTRL[8:6]和CTRL[10:9]的 设 置,已 封 装 原 子 操 作API,建 议 通 过 这 些 原 子 操 作API进 行 配 置。
调 用 示 例
如 下 示 例 中 开 启 非 饱 和 模 式,数 据 类 型 为half。
C++AscendC::SetCtrlSpr<48, 48>(1);原 子 操 作 中,half类 型 配 置 全 局 非 饱 和 模 式 示 例。
C++AscendC::SetCtrlSpr<6, 8>(2); AscendC::SetAtomicAdd<half>(); AscendC::DataCacheCleanAndInvalid<half, AscendC::CacheLine::ENTIRE_DATA_CACHE, AscendC::DcciDst::CACHELINE_ATOMIC>(dstTensor); AscendC::SetCtrlSpr<48, 48>(1); ...