aclSetDynamicTensorAddr【免费下载链接】opbase本项目是CANN算子库的基础框架库为算子提供公共依赖文件和基础调度能力。项目地址: https://gitcode.com/cann/opbase功能说明通过aclSetAclOpExecutorRepeatable使能aclOpExecutor可复用后若输入或输出Device内存地址变更需要刷新对应aclTensorList中记录的Device内存地址。函数原型aclnnStatus aclSetDynamicTensorAddr(aclOpExecutor *executor, size_t irIndex, const size_t relativeIndex, aclTensorList *tensors, void *addr)参数说明参数名输入/输出说明executor输入设置为复用状态的aclOpExecutor。irIndex输入待刷新的aclTensorList在算子原型定义中的索引从0开始计数。relativeIndex输入待刷新的aclTensor在aclTensorList中的索引。如果aclTensorList有N个Tensor其取值范围为[0, N-1]。tensors输入待刷新的aclTensorList指针。addr输入需要刷新到指定aclTensor中的Device存储地址该地址必须32字节对齐否则可能会出现未定义错误。返回值说明返回0表示成功返回其他值表示失败返回码列表参见公共接口返回码。可能失败的原因返回561103executor或tensors是空指针。返回161002relativeIndextensors里tensor的个数。返回161002irIndex算子原型输入/输出参数的个数。约束说明无调用示例关键代码示例如下仅供参考不支持直接拷贝运行。// 创建输入和输出的aclTensor和aclTensorList std::vectorint64_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 tensor4 aclCreateTensor(shape.data(), shape.size(), aclDataType::ACL_FLOAT, nullptr, 0, aclFormat::ACL_FORMAT_ND, shape.data(), shape.size(), nullptr); aclTensor tensor5 aclCreateTensor(shape.data(), shape.size(), aclDataType::ACL_FLOAT, nullptr, 0, aclFormat::ACL_FORMAT_ND, shape.data(), shape.size(), nullptr); aclTensor *list1[] {tensor1, tensor2}; auto tensorList aclCreateTensorList(list1, 2); aclTensor *list2[] {tensor4, tensor5}; auto output aclCreateTensorList(list2, 2); uint64_t workspaceSize 0; aclOpExecutor *executor; // AddCustom算子有两个输入aclTensorList和aclTensor一个输出aclTensorList // 调用第1段接口 aclnnAddCustomGetWorkspaceSize(tensorList, tensor3, output, workspaceSize, executor); // 设置executor为可复用 aclSetAclOpExecutorRepeatable(executor); void *addr; aclSetDynamicTensorAddr(executor, 0, 0, tensorList, addr); // 刷新输入tensorlist中第1个aclTensor的device地址 aclSetDynamicTensorAddr(executor, 0, 1, tensorList, addr); // 刷新输入tensorlist中第2个aclTensor的device地址 aclSetDynamicTensorAddr(executor, 0, 0, output, addr); // 刷新输出output中第1个aclTensor的device地址 aclSetDynamicTensorAddr(executor, 0, 1, output, addr); // 刷新输出output中第2个aclTensor的device地址 ... // 调用第2段接口 aclnnAddCustom(workspace, workspaceSize, executor, stream); // 清理executor aclDestroyAclOpExecutor(executor);【免费下载链接】opbase本项目是CANN算子库的基础框架库为算子提供公共依赖文件和基础调度能力。项目地址: https://gitcode.com/cann/opbase创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考