模型的输入、输出资源释放
关于模型的输入、输出资源释放的接口调用流程,请依次参见主要接口调用流程、基本的模型执行流程。
基本原理
在模型推理结束后,需及时释放描述模型输入、输出的数据结构,并销毁对应内存中的数据,否则可能导致内存异常。
模型可能存在多个输入、多个输出,每个输入/输出的内存地址、内存大小用aclDataBuffer类型的数据来描述,针对每个输入/输出,需调用aclDestroyDataBuffer接口销毁相应的aclDataBuffer类型,并调用aclrtFree接口释放内存中的数据。
示例代码
//释放模型推理的输入、输出资源
//释放输入资源,包括数据结构和内存
for (size_t i = 0; i < aclmdlGetDatasetNumBuffers(input_); ++i) {
aclDataBuffer *dataBuffer = aclmdlGetDatasetBuffer(input_, i);
(void)aclDestroyDataBuffer(dataBuffer);
}
(void)aclmdlDestroyDataset(input_);
input_ = nullptr;
aclrtFree(modelInputBuffer);
//释放输出资源,包括数据结构和内存
for (size_t i = 0; i < aclmdlGetDatasetNumBuffers(output_); ++i) {
aclDataBuffer* dataBuffer = aclmdlGetDatasetBuffer(output_, i);
void* data = aclGetDataBufferAddr(dataBuffer);
(void)aclrtFree(data);
(void)aclDestroyDataBuffer(dataBuffer);
}
(void)aclmdlDestroyDataset(output_);
output_ = nullptr;
父主题: 模型推理基本场景