BuildCCE
功能说明
BuildCCE的功能是,生成用户在目标机上定义的TIK描述语言,并将TIK描述语言编译成昇腾AI处理器上可执行的二进制代码,以及对应的配置文件。
函数原型
BuildCCE(kernel_name, inputs, outputs, output_files_path=None, enable_l2=False, config=None, flowtable=None, evaluates=None, extend_params=None)
参数说明
参数名称  | 
输入/输出  | 
含义  | 
|---|---|---|
kernel_name  | 
输入  | 
|
inputs  | 
输入  | 
  | 
outputs  | 
输入  | 
  | 
output_files_path  | 
输入  | 
编译后目标文件输出文件路径,支持string类型。 
  | 
enable_l2  | 
输入  | 
外存是否是L2,支持Bool类型。默认值为False。 该参数不生效。  | 
config  | 
输入  | 
字典类型,包括key和value,key为字符串格式,用于配置算子编译信息。 配置格式: config = {"key":value}
配置示例: config = {"tbe_debug_level":2,"enable_const_fold":True,"double_buffer_non_reuse":True}
当前支持的key为: 
  | 
flowtable  | 
输入  | 
传入类型:由scope为“scope_gm”的Tensor或InputScalar组成的list或者tuple。 flowtable参数列表,用于传入Tiling参数(例如在动态shape场景下,由算子选择器计算得到)。该列表中的参数个数和inputs的参数个数之和小于等于64。  | 
evaluates  | 
输入  | 
调试参数,用户在编译阶段给已定义的全局的scalar变量赋值。 字典类型,包括key和value,key为scalar的变量名,是Scalar格式;value为具体值,支持python的int, float。 配置格式: evaluates = {key : value}
配置示例: a = tik_instance.Scalar(dtype="float16")
a.set_as(1)
tik_instance.BuildCCE(..., evaluates = {a : 2})
 | 
extend_params  | 
输入  | 
扩展参数,字典类型,包括key和value, key表示扩展参数名称,数据类型为字符串, value表示扩展参数值,具体类型和key相关。 示例: extend_params = {"param1": value1, 
                 "param2": value2}
当前支持的扩展参数请见表2。  | 
扩展参数名称  | 
参数说明  | 
|---|---|
build_multi_kernels  | 
根据tiling策略集合编译生成tiling策略对应的kernel,kernel名与tiling策略在集合里的索引有关,并会将这些kernel封装在同一个.o文件中,运行的框架会自动根据tiling策略调用相应的功能。 配置示例: tik_instance.BuildCCE(...,
 extend_params={"build_multi_kernels":{
  "tiling_key":[Scalar1, Scalar2],
  "tiling_key_value":
       [[Scalar1_val_1,Scalar2_val_1],
       [Scalar1_val_2,Scalar2_val_2]]}})
其中, tiling_key为tiling策略的关键词,配置要求为: 
 
 tiling_key_value为tiling策略的关键词所对应的值,配置要求为: 
  | 
支持的型号
注意事项
- 同一tensor不能同时在inputs和outputs中,不然TIK将报错。
 - 所有scope_gm中的tensor必须在inputs或者在outputs中(除非是workspace中的Tensor或者是有赋初值init_value的Tensor),否则编译报错。
 - BuildCCE在无输出时会指定一个长度为1的数据为0的数组,即设置outputs=[],返回值为[ [0] ]。
 - inputs中需要将Tensor放置在InputScalar前面。
 - flowtable中需要将Tensor放置在InputScalar前面,并且只允许存在一个Tensor。
 - evaluates只会改变初次scalar定义的值, evaluates字典最大支持16个元素。
 
返回值
无
调用示例
from tbe import tik
tik_instance = tik.Tik()
data_A = tik_instance.Tensor("float16", (128,), name="data_A", scope=tik.scope_gm)
data_B = tik_instance.Tensor("float16", (128,), name="data_B", scope=tik.scope_gm)
data_C = tik_instance.Tensor("float16", (128,), name="data_C", scope=tik.scope_gm)
tik_instance.BuildCCE(kernel_name="simple_add",inputs=[data_A,data_B],outputs=[data_C])