aclSetRawTensorAddr
函数功能
刷新aclTensor中原始记录的Device内存地址,aclTensor由aclCreateTensor接口创建。
通常情况下,若网络需要频繁复用aclTensor(即保持shape、format等属性一致),可使用本接口刷新aclTensor原始的Device内存地址,达到复用的目的。
函数原型
aclnnStatus aclSetRawTensorAddr(aclTensor *tensor, void *addr)
参数说明
参数名 |
输入/输出 |
说明 |
---|---|---|
tensor |
输入 |
待刷新的aclTensor指针。 |
addr |
输入 |
需要刷新到指定aclTensor中的Device存储地址。 |
约束与限制
- 必须在一阶段接口aclxxXxxGetWorkspaceSize之前或者二阶段接口aclxxXxx之后使用,不支持在一阶段与二阶段接口之间使用。
- 本接口可与aclGetRawTensorAddr接口配套使用,查看刷新后的结果是否符合预期。
调用示例
关键代码示例如下,仅供参考,不支持直接拷贝运行。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | // 创建输入和输出张量inputTensor和outputTensor std::vector<int64_t> shape = {1, 2, 3}; aclTensor inputTensor = aclCreateTensor(shape.data(), shape.size(), aclDataType::ACL_FLOAT, nullptr, 0, aclFormat::ACL_FORMAT_ND, shape.data(), shape.size(), nullptr); aclTensor outputTensor = aclCreateTensor(shape.data(), shape.size(), aclDataType::ACL_FLOAT, nullptr, 0, aclFormat::ACL_FORMAT_ND, shape.data(), shape.size(), nullptr); // 调用Xxx算子一、二阶段接口 auto ret = aclxxXxxGetWorkspaceSize(inputTensor, outputTensor, &workspace_size, &executor); ret = aclxxXxx(workspace, workspace_size, executor, stream); ... void *addr1; void *addr2; ... //申请device内存addr1, addr2 ret = aclSetRawTensorAddr(inputTensor, addr1); // 刷新输入张量inputTensor的device地址 ret = aclSetRawTensorAddr(outputTensor, addr2); // 刷新输出张量outputTensor的device地址 ... // 复用inputTensor,outputTensor后,调用Yyy算子aclnn一、二阶段接口 auto ret = aclnnYyyGetWorkspaceSize(inputTensor, outputTensor, &workspace_size, &executor); ret = aclnnYyy(workspace, workspace_size, executor, stream); ... |
父主题: 公共接口