设置kernel类型

函数功能

用于用户自定义设置kernel类型,控制算子执行时只启动该类型的核,避免启动不需要工作的核,缩短核启动开销。

函数原型

参数说明

表1 参数说明

参数

输入/输出

说明

key

输入

tiling key的key值,此参数是正数,表示某个核函数的分支。

value

输入

设置的kernel类型,可选值范围,kernel类型具体说明请参考表2

enum KernelMetaType {
    KERNEL_TYPE_AIV_ONLY,
    KERNEL_TYPE_AIC_ONLY,
    KERNEL_TYPE_MIX_AIV_1_0,
    KERNEL_TYPE_MIX_AIC_1_0,
    KERNEL_TYPE_MIX_AIC_1_1,
    KERNEL_TYPE_MIX_AIC_1_2,
    KERNEL_TYPE_AICORE,
    KERNEL_TYPE_VECTORCORE,
    KERNEL_TYPE_MIX_AICORE,
    KERNEL_TYPE_MIX_VECTOR_CORE,
    KERNEL_TYPE_MAX
};
表2 kernel type取值说明

参数

说明

KERNEL_TYPE_AIV_ONLY

算子执行时仅启动AI Core上的Vecor核:比如用户在host侧设置blockdim为10,则会启动10个Vecor核。

Atlas A2训练系列产品/Atlas 800I A2推理产品:支持该参数

Atlas推理系列产品AI Core:不支持该参数

KERNEL_TYPE_AIC_ONLY

算子执行时仅启动AI Core上的Cube核:比如用户在host侧设置blockdim为10,则会启动10个Cube核。

Atlas A2训练系列产品/Atlas 800I A2推理产品:支持该参数

Atlas推理系列产品AI Core:不支持该参数

KERNEL_TYPE_MIX_AIV_1_0

AIC、AIV混合场景下,使用了多核控制相关指令时,设置核函数的类型为MIX AIV:AIC 1:0(带有硬同步),算子执行时仅会启动AI Core上的Vecor核,比如用户在host侧设置blockdim为10,则会启动10个Vecor核。

硬同步的概念解释如下:当不同核之间操作同一块全局内存且可能存在读后写、写后读以及写后写等数据依赖问题时,通过调用SyncAll()函数来插入同步语句来避免上述数据依赖时可能出现的数据读写错误问题。目前多核同步分为硬同步和软同步,硬同步是利用硬件自带的全核同步指令由硬件保证多核同步。

Atlas A2训练系列产品/Atlas 800I A2推理产品:支持该参数

Atlas推理系列产品AI Core:不支持该参数

KERNEL_TYPE_MIX_AIC_1_0

AIC、AIV混合场景下,使用了多核控制相关指令时,设置核函数的类型为MIX AIC:AIV 1:0(带有硬同步),算子执行时仅会启动AI Core上的Cube核,比如用户在host侧设置blockdim为10,则会启动10个Cube核。

Atlas A2训练系列产品/Atlas 800I A2推理产品:支持该参数

Atlas推理系列产品AI Core:不支持该参数

KERNEL_TYPE_MIX_AIC_1_1

AIC、AIV混合场景下,设置核函数的类型为MIX AIC:AIV 1:1,算子执行时会同时启动AI Core上的Cube核和Vector核,比如用户在host侧设置blockdim为10,则会启动10个Cube核和10个Vector核。

该参数为预留参数,当前版本暂不支持。

KERNEL_TYPE_MIX_AIC_1_2

AIC、AIV混合场景下,设置核函数的类型为MIX AIC:AIV 1:2,算子执行时会同时启动AI Core上的Cube核和Vector核,比如用户在host侧设置blockdim为10,则会启动10个Cube核和20个Vector核。

Atlas A2训练系列产品/Atlas 800I A2推理产品:支持该参数

Atlas推理系列产品AI Core:不支持该参数

KERNEL_TYPE_AICORE

算子执行时仅会启动AI Core,比如用户在host侧设置blockdim为5,则会启动5个AI Core。

Atlas 推理系列产品:支持该参数

Atlas A2训练系列产品/Atlas 800I A2推理产品:不支持该参数

KERNEL_TYPE_VECTORCORE

该参数为预留参数,当前版本暂不支持。

KERNEL_TYPE_MIX_AICORE

该参数为预留参数,当前版本暂不支持。

KERNEL_TYPE_MIX_VECTOR_CORE

基于Ascend C开发的矢量计算相关的算子可以运行在Vector Core上,该接口用于使能Vector Core。基于Vector Core架构进行算子编程的详细介绍请参考基于VectorCore编程

算子执行时会同时启动AI Core和Vector Core, 此时AI Core会当成Vector Core使用,比如用户在host侧设置block_dim为10,则会启动总数为10的AI Core和Vector Core。

通过SetBlockDim设置核数时, 需要大于AI Core的核数,否则不会启动VectorCore。

Atlas 推理系列产品:支持该参数

Atlas A2训练系列产品/Atlas 800I A2推理产品:不支持该参数

支持的型号

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

Atlas推理系列产品AI Core

约束说明

调用示例