aclSetOutputTensorAddr
函数功能
通过aclSetAclOpExecutorRepeatable使能aclOpExecutor可复用后,若输出Device内存地址变更,需要刷新输出aclTensor中记录的Device内存地址。
函数原型
aclnnStatus aclSetOutputTensorAddr(aclOpExecutor *executor, const size_t index, aclTensor *tensor, void *addr)
参数说明
参数名 |
输入/输出 |
说明 |
|---|---|---|
executor |
输入 |
设置为复用状态的aclOpExecutor。 |
index |
输入 |
待刷新的输出aclTensor的索引,从0开始计数。 |
tensor |
输入 |
待刷新的aclTensor指针。 |
addr |
输入 |
需要刷新到指定aclTensor中记录的Device存储地址。 |
返回值说明
返回0表示成功,返回其他值表示失败。
使用样例
// 创建输入和输出的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 tensor4= 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[] = {tensor3, tensor4};
auto tensorList = aclCreateTensorList(list, 2);
uint64_t workspace_size = 0;
aclOpExecutor *executor;
// AddCustom算子有两个输入(aclTensor),两个输出(aclTensor和aclTensorList)
// 调用第1段接口
aclnnAddCustomGetWorkspaceSize(tensor1, tensor2, outpu,tensorList , &workspace_size, &executor);
// 设置executor为可复用
aclSetAclOpExecutorRepeatable(executor);
void *addr;
aclSetOutputTensorAddr(executor, 0, output, addr); // 刷新输出aclTensor的device地址
aclSetOutputTensorAddr(executor, 1, output, addr); // 刷新输出tensorList中第一个aclTensor的device地址
aclSetOutputTensorAddr(executor, 2, output, addr); // 刷新输出tensorList中第二个aclTensor的device地址
.......
// 调用第2段接口
aclnnAddCustom(workspace, workspace_size, executor, stream);
// 清理executor
aclDestroyAclOpExecutor(executor);
父主题: 基础接口