开发者
资源
[object Object]

在静态图模式下,可以通过整图下沉优化调度性能。将完整的计算图一次性下发至Device侧,后续执行则无需Host参与,由Device自主完成计算,从而减少Host-Device交互开销,提升执行效率。部分算子的Tiling计算依赖运行时输入的具体数值(Tiling值依赖),需在执行时动态计算Tiling参数。针对该场景,可采用Tiling下沉优化方案:将Tiling计算下沉至Device侧的AI CPU上执行,从而实现计算全程在Device侧高效完成。

[object Object]

自定义算子使能Tiling下沉的步骤如下,完整样例请参考

Tiling下沉场景下,算子工程的op_host目录结构如下,Tiling实现文件需单独放在在一个cpp文件中,示例中为add_custom_tiling_sink_tiling.cpp。

[object Object]

以AddCustom算子为例,讲解关键代码文件的具体实现方法如下:

  • 在add_custom_tiling_sink_tiling.h中进行Tiling实现函数的声明

    [object Object]
  • 算子原型定义、InferShape、InferDataType实现文件add_custom_tiling_sink.cpp,需包含add_custom_tiling_sink_tiling.h,进行Tiling函数和算子原型定义的关联。

    Tiling下沉仅适用于存在Tiling值依赖(即当InferShape不依赖输入值,仅Tiling计算需要输入值)且算子输入为非Const类型的场景,本示例中的输入y通过ValueDepend配置了非Const类型的Tiling值依赖。

    [object Object]
  • Tiling函数的实现文件add_custom_tiling_sink_tiling.cpp

    • Tiling函数中通过判断值依赖InputTensor即输入y的数据指针是否为空指针来确认当前是否处于编译期。Tiling下沉场景,编译期需要为算子分配内存,包括其所需的workspace。为了保证运行时的高效性,编译期应根据算子的执行需求,合理设置所需的workspace最大值,以避免内存不足或浪费。AddCustomTilingSink样例不需要用户workspace,不涉及设置,此处设置为固定值仅作为示例。
    • 完成下沉Tiling函数注册:包含device_op_impl_registry.h头文件,使用宏DEVICE_IMPL_OP_OPTILING进行注册。
    [object Object]
  • 算子核函数实现

    当前Tiling下沉仅支持融合算子,为了模拟融合算子场景,通过接口强制指定算子在AIC、AIV混合场景运行。

    [object Object]
  • 修改op_host目录下的编译脚本CMakeLists.txt,添加Tiling下沉编译命令。具体代码如下所示:

    [object Object]