Skip to content
版 本

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 推 理 系 列 产 品,推 荐 使 用SetSaturationFlagGetSaturationFlag来 设 置 和 获 取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 推 理 系 列 产 品,推 荐 使 用SetSaturationFlagGetSaturationFlag来 设 置 和 获 取CTRL[48]以 控 制 饱 和 模 式。

表 6 Ascend 950PR/Ascend 950DT饱 和 模 式 全 局 或 单 指 令 生 效 配 置 表

全 局 开 启 位控 制 位功 能 描 述
CTRL[60] = 1'b0Reg矢 量 计 算Cast API的trait模 板 参 数 中satMode设 置 为SatMode::NO_SAT。单 指 令 非 饱 和 模 式。
CTRL[60] = 1'b0Reg矢 量 计 算Cast API的trait模 板 参 数 中satMode设 置 为SatMode::SAT。单 指 令 饱 和 模 式。
CTRL[60] = 1'b1CTRL[48] = 1'b1全 局 非 饱 和 模 式(浮 点 数 计 算 和 浮 点 数 精 度 转 换)。
CTRL[60] = 1'b1CTRL[48] = 1'b0全 局 饱 和 模 式(浮 点 数 计 算 和 浮 点 数 精 度 转 换)。
CTRL[60] = 1'b1CTRL[59] = 1'b1全 局 非 饱 和 模 式(浮 点 数 转 整 数 或 整 数 转 整 数 时 的 精 度 转 换)。
CTRL[60] = 1'b1CTRL[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]比 特 位。

调 用 示 例

  • 如 下 示 例 中 开 启 非 饱 和 模 式,数 据 类 型 为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);
    ...
    

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