使能aclOpExecutor为可复用状态。当用户想复用已有的aclOpExecutor时,必须在一阶段接口aclxxXxxGetworkspaceSize运行完成后,立即使用该接口使能复用,后续可多次调用第二段接口aclXxx进行算子执行。
aclOpExecutor是框架定义的算子执行器,用于执行算子计算的容器,开发者无需关注其内部实现。
aclnnStatus aclSetAclOpExecutorRepeatable(aclOpExecutor *executor)
参数名 |
输入/输出 |
说明 |
|---|---|---|
executor |
输入 |
待设置复用的aclOpExecutor。 |
关于L0层接口的具体介绍请参见基础张量操作接口。
关键代码示例如下,仅供参考,不支持直接拷贝运行。
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); |