下载
中文
注册
我要评分
文档获取效率
文档正确性
内容完整性
文档易理解
在线提单
论坛求助
昇腾小AI

aclSetDynamicTensorAddr

函数功能

通过aclSetAclOpExecutorRepeatable使能aclOpExecutor可复用后,若输入或输出Device内存地址变更,需要刷新对应aclTensorList中记录的Device内存地址。

函数原型

aclnnStatus aclSetDynamicTensorAddr(aclOpExecutor *executor, size_t irIndex, const size_t relativeIndex, aclTensorList *tensors, void *addr)

参数说明

参数名

输入/输出

说明

executor

输入

设置为复用状态的aclOpExecutor。

irIndex

输入

待刷新的aclTensorList在算子IR原型定义中的索引,从0开始计数。

relativeIndex

输入

待刷新的aclTensor在aclTensorList中的索引。如果aclTensorList有N个Tensor,其取值范围为[0, N-1]。

tensors

输入

待刷新的aclTensorList指针。

addr

输入

需要刷新到指定aclTensor中的Device存储地址。

返回值说明

返回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
28
29
30
31
// 创建输入和输出的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 *list1[] = {tensor1, tensor2};
auto tensorList = aclCreateTensorList(list1, 2);
aclTensor *list2[] = {tensor3 tensor4};
auto output = aclCreateTensorList(list2, 2);
uint64_t workspace_size = 0;
aclOpExecutor *executor;
// AddCustom算子有两个输入(aclTensorList和aclTensor),一个输出(aclTensorList)
// 调用第1段接口
aclnnAddCustomGetWorkspaceSize(tensorList, tensor3, output, &workspace_size, &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, 2, 0, tensorList, addr); // 刷新输出tensorlist中第1个aclTensor的device地址
aclSetDynamicTensorAddr(executor, 2, 1, tensorList, addr); // 刷新输出tensorlist中第2个aclTensor的device地址
.......
// 调用第2段接口
aclnnAddCustom(workspace, workspace_size, executor, stream);
// 清理executor
aclDestroyAclOpExecutor(executor);  
搜索结果
找到“0”个结果

当前产品无相关内容

未找到相关内容,请尝试其他搜索词