Skip to content

InitSocState

产品支持情况

  • Ascend 950PR/Ascend 950DT:支持
  • Atlas A3 训练系列产品/Atlas A3 推理系列产品:支持
  • Atlas A2 训练系列产品/Atlas A2 推理系列产品:支持
  • Atlas 200I/500 A2 推理产品:不支持
  • Atlas 推理系列产品AI Core:支持
  • Atlas 推理系列产品Vector Core:支持
  • Atlas 训练系列产品:不支持

功能说明

头文件路径为:"basic_api/kernel_operator_common_intf.h"

本接口对AI Core的全局状态进行初始化,包括AIC(Cube Core)与AIV(Vector Core)的公共状态及各自特有状态。由于不同产品的实现存在差异,实际执行的初始化项也有所不同。

接口涉及的全部初始化操作汇总如下:

状态类别初始化内容
公共状态初始化原子累加状态,关闭数据搬运随路原子操作功能。
公共状态初始化Mask工作模式为Normal模式。
公共状态初始化用于AddDeqRelu/CastDequant/Cast的s322fp16场景的scale量化参数为1。
公共状态初始化CTRL寄存器中除CTRL[48]以外的比特位为默认值。
公共状态初始化原子操作开启位与原子操作类型,为无效的原子操作类型。
AIC初始化LoadData(卷积数据搬运)接口调用时Pad填充的数值为0。
AIC初始化使用LoadData(卷积数据搬运)时L1 Buffer(A1/B1)的边界值为0,表示无边界。
AIVMask配置为全1,表示所有数都参与计算。
AIV重置loop mode的参数

各产品实际执行的初始化项如下:

表1 针对Ascend 950PR/Ascend 950DT本接口执行的初始化项

状态类别初始化内容
公共状态原子累加状态
公共状态Mask工作模式
公共状态用于AddDeqRelu/CastDequant/Cast的s322fp16场景的scale量化参数
公共状态CTRL寄存器
公共状态原子操作开启位与原子操作类型
AICLoadData(卷积数据搬运)接口调用时Pad填充的数值
AIVMask
AIVloop mode的参数

表2 针对Atlas A3 训练系列产品/Atlas A3 推理系列产品本接口执行的初始化项

状态类别初始化内容
公共状态原子累加状态
公共状态Mask工作模式
AICLoadData(卷积数据搬运)接口调用时Pad填充的数值
AIC使用LoadData(卷积数据搬运)时L1 Buffer(A1/B1)的边界值
AIVMask

表3 针对Atlas A2 训练系列产品/Atlas A2 推理系列产品本接口执行的初始化项

状态类别初始化内容
公共状态原子累加状态
公共状态Mask工作模式
AICLoadData(卷积数据搬运)接口调用时Pad填充的数值
AIC使用LoadData(卷积数据搬运)时L1 Buffer(A1/B1)的边界值
AIVMask

表4 针对Atlas 推理系列产品AI Core和Atlas 推理系列产品Vector Core本接口执行的初始化项

状态类别初始化内容
公共状态原子累加状态

函数原型

C++
__aicore__ inline void InitSocState()

参数说明

返回值说明

约束说明

  • 在实际运行中,这些值可能被前序执行的算子修改,若不调用该接口进行初始化,非预期的值可能导致计算结果出现精度错误。

    例如前序算子使用Counter模式但未重置为Normal模式,当前算子以默认的Normal模式设置Mask时,会导致Mask设置不符合预期,进而引发精度错误。

  • TPipe框架编程中,初始化过程由TPipe完成,无需开发者关注;在静态Tensor编程的场景中,用户必须在Kernel入口处调用此函数来初始化AI Core状态。

调用示例

C++
__global__ __aicore__ void add_custom(GM_ADDR x, GM_ADDR y, GM_ADDR z)
{
    // 静态Tensor编程方式中需要开发者手动调用InitSocState()接口初始化全局状态寄存器。
    AscendC::InitSocState();
    KernelAdd op;
    op.Init(x, y, z);
    op.Process();
}

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