aclSetAclOpExecutorRepeatable

功能说明

使能aclOpExecutor为可复用状态。当用户想复用已有的aclOpExecutor时,必须在一阶段接口aclxxXxxGetworkspaceSize运行完成后,立即使用该接口使能复用,后续可多次调用第二段接口aclXxx进行算子执行。

aclOpExecutor是框架定义的算子执行器,用于执行算子计算的容器,开发者无需关注其内部实现。

函数原型

aclnnStatus aclSetAclOpExecutorRepeatable(aclOpExecutor *executor)

参数说明

参数名

输入/输出

说明

executor

输入

待设置复用的aclOpExecutor。

返回值说明

返回0表示成功,返回其他值表示失败,返回码列表参见公共接口返回码。

可能失败的原因:

约束说明

调用示例

关键代码示例如下,仅供参考,不支持直接拷贝运行。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
// 创建输入和输出的aclTensor和aclTensorList
std::vector<int64_t> shape = {1, 2, 3};
aclTensor tensor1 = aclCreateTensor(shape.data(), shape.size(), aclDataType::ACL_FLOAT,
nullptr, 0, aclFormat::ACL_FORMAT_ND, shape.data(), shape.size(), nullptr);
aclTensor tensor2 = aclCreateTensor(shape.data(), shape.size(), aclDataType::ACL_FLOAT,
nullptr, 0, aclFormat::ACL_FORMAT_ND, shape.data(), shape.size(), nullptr);
aclTensor tensor3 = aclCreateTensor(shape.data(), shape.size(), aclDataType::ACL_FLOAT,
nullptr, 0, aclFormat::ACL_FORMAT_ND, shape.data(), shape.size(), nullptr);
aclTensor output = aclCreateTensor(shape.data(), shape.size(), aclDataType::ACL_FLOAT,
nullptr, 0, aclFormat::ACL_FORMAT_ND, shape.data(), shape.size(), nullptr);
aclTensor *list[] = {tensor1, tensor2};
auto tensorList = aclCreateTensorList(list, 2);
uint64_t workspaceSize = 0;
aclOpExecutor *executor;
// AddCustom算子有两个输入(aclTensorList和aclTensor),一个输出(aclTensor)
// 调用第1段接口
aclnnAddCustomGetWorkspaceSize(tensorList, tensor3, output, &workspaceSize, &executor);
// 设置executor为可复用
aclSetAclOpExecutorRepeatable(executor);  
void *addr;
aclSetDynamicInputTensorAddr(executor, 0, 0, tensorList, addr);   // 刷新输入tensorList中第1个aclTensor的device地址
aclSetDynamicInputTensorAddr(executor, 0, 1, tensorList, addr);  // 刷新输入tensorList中第2个aclTensor的device地址
...
// 调用第2段接口
aclnnAddCustom(workspace, workspaceSize, executor, stream);
// 清理executor
aclDestroyAclOpExecutor(executor);