AddLaunch
产品支持情况
全量芯片支持。
头文件/库文件
- 头文件:#include <exe_graph/runtime/annotated_args_context.h>
- 库文件:liblowering.so
功能说明
添加一个声明式kernel launch。接口提取AnnotatedKernelArgs的参数,并记录kernel名称、二进制、block dim和逻辑stream ID。
端侧场景:要求恰好调用一次。
函数原型
ge::graphStatus AddLaunch(const AnnotatedKernelLaunchInfo &launch_info, AnnotatedKernelArgs &&args)
参数说明
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| launch_info | 输入 | kernel launch信息。kernel_name和kernel_bin必须非空,kernel_bin_size和block_dim必须大于0;stream_id应使用GetStreamId的返回值。详见AnnotatedKernelLaunchInfo。接口在调用期间GE会复制并保存kernel_name和kernel_bin数据;调用方可在接口返回后结束这些临时数据的生命周期。 |
| args | 输入 | kernel launch参数构建器,以右值引用移交。参数必须非空,且此前的参数追加操作均成功。调用期间GE会复制并保存args数据;调用方可在接口返回后结束args的生命周期。调用方以std::move移交后,不应依赖该对象的后续状态。 |
返回值说明
| 参数名 | 类型 | 说明 |
|---|---|---|
| - | ge::graphStatus | GRAPH_SUCCESS(0):添加成功;其他值:参数或Context状态异常,添加失败。 |
约束说明
- 调用方必须检查每次调用的返回值,并在失败时立即返回该错误状态。
调用示例
以下kKernelBin和kKernelBinSize仅表示用户实际编译得到的kernel二进制及其大小,并非可执行的示例二进制。
extern const uint8_t kKernelBin[];
extern const size_t kKernelBinSize;
const auto *input = ctx.GetInputTensor(0U);
const auto *output = ctx.GetOutputTensor(0U);
if ((input == nullptr) || (output == nullptr)) {
return ge::GRAPH_FAILED;
}
gert::AnnotatedKernelArgs args(
gert::InputAddr{0U, input->GetAddr()},
gert::OutputAddr{0U, output->GetAddr()},
uint64_t{1U});
const auto ret = ctx.AddLaunch(
gert::AnnotatedKernelLaunchInfo{
"my_kernel", kKernelBin, kKernelBinSize, 32U, ctx.GetStreamId()},
std::move(args));
if (ret != ge::GRAPH_SUCCESS) {
return ret;
}
return ge::GRAPH_SUCCESS;