Skip to content

REGIST_MATMUL_OBJ

功能说明

初始化Matmul对象。

函数原型

Text
REGIST_MATMUL_OBJ(tpipe, workspace, ...)

参数说明

表1 参数说明

参数名输入/输出描述
tpipe输入Tpipe对象。
workspace输入系统workspace指针。
...输入可变参数,传入Matmul对象和与之对应的Tiling结构,要求Tiling结构的数据类型为TCubeTiling结构

Tiling参数可以通过Host侧GetTiling接口获取,并传递到kernel侧使用。

返回值说明

约束说明

  • 在分离模式中,本接口必须在InitBuffer接口前调用。
  • 在程序中,最多支持定义4个Matmul对象。
  • 在Matmul的内部实现中使用了CrossCoreSetFlagCrossCoreWaitFlag进行核间同步控制,因此开发者同时使用CrossCoreSetFlag(或CrossCoreWaitFlag)和Matmul时,需注意避免核间同步flagId冲突。Matmul高阶API内部占用的flagId范围与定义的Matmul对象数目相关。假设定义了N个Matmul对象,则Matmul高阶API内部占用的flagId范围为[0, 2 * N - 1]。Matmul最多支持定义4个对象,此时flagId占用范围为[0, 7]。
  • 当代码中只有一个Matmul对象时,本接口可以不传入tiling参数,通过Init接口单独传入tiling参数。
  • 当代码中有多个Matmul对象时,必须满足Matmul对象与其tiling参数一一对应,依次传入,具体方式请参考调用示例。
  • 在分离模式中,调用本接口后,AIC核不会主动执行接口,仅在AIV核执行到下述接口后,才会触发AIC核的执行,其他接口则不会在AIC核上执行。

调用示例

Text
Tpipe pipe;
// 推荐:初始化单个matmul对象,传入tiling参数
REGIST_MATMUL_OBJ(&pipe, GetSysWorkSpacePtr(), mm, &tiling);
// 推荐:初始化多个matmul对象,传入对应的tiling参数
REGIST_MATMUL_OBJ(&pipe, GetSysWorkSpacePtr(), mm1, mm1tiling, mm2, mm2tiling, mm3, mm3tiling, mm4, mm4tiling);
// 初始化单个matmul对象,未传入tiling参数。注意,该场景下需要使用Init接口单独传入tiling参数。这种方式将matmul对象的初始化和tiling的设置分离,比如,Tiling可变的场景,可通过这种方式多次对Tiling进行重新设置
REGIST_MATMUL_OBJ(&pipe, GetSysWorkSpacePtr(), mm);
mm.Init(&tiling);

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