调度与编译
如下代码所示,当定义完计算逻辑后,需要在算子接口实现函数中实现调度与编译。
通过调用auto_schedule接口,便可以自动生成相应的调度。配置信息包括算子内核名以及输入、输出张量。
with tvm.target.cce(): schedule = dsl.auto_schedule(result) config = { "name": kernel_name, "tensor_list": [input_data, result] "bool_storage_as_1bit":True } dsl.build(schedule, config)
- 使用“auto_schedule”接口,自动生成相应的调度(schedule),“auto_schedule”接口的参数为算子的输出张量。
schedule可以理解为:描述的计算过程如何在硬件上高效执行。就是把相关的计算和硬件设备上的相关指令对应起来。
- “name”:编译生成的算子二进制文件名称,只能是大小写字母、数字、“_”的组合,且必须是字母或者“_”开头,长度小于或等于200个字符。
- “tensor_list”(张量列表)中保存输入张量、输出张量,参数顺序与个数需要与原型定义,算子函数声明中的输入输出参数顺序一致。
注意:输入tensor需要是placeholder接口返回的tensor对象,此tensor对象的内存地址不能被覆盖。
例如:"tensor_list": [tensor_a, tensor_b, res],tensor_a与tensor_b是输入张量,res为输出张量。
- “bool_storage_as_1bit”:Bool类型存储时是否按照1 bit存储。True:按照1bit存储,False:按照8bit进行存储,默认值为True。
当tbe.dsl.vcmp与tbe.dsl.vsel接口的mode/condition为bool时,需要设置此参数为False。
- 根据调度和配置使用“build”接口来进行算子编译,算子编译过程会根据输入的数据形状、类别、算子参数等编译出专用内核,这个过程在生成模型时发生。
- schedule:算子的计算schedule对象。
- config:编译参数配置的map。
编译完成后,会生成算子目标文件.o文件与算子描述文件.json文件。
父主题: 功能实现