根据模型描述信息获取指定输出的大小,单位为Byte。
如果通过本接口获取的大小为0,有可能是由于输出Shape的范围不确定,当前支持以下两种处理方式:
调用aclCreateDataBuffer接口创建存放对应index输出数据的aclDataBuffer类型时,支持在data参数处传入nullptr,同时size需设置为0,表示创建一个空的aclDataBuffer类型,然后在模型执行过程中,系统内部自行计算并申请该index输出的内存。使用该方式可节省内存,但内存数据使用结束后,需由用户释放内存并重置aclDataBuffer,同时,系统内部申请内存时涉及内存拷贝,可能涉及性能损耗。
1 2 3 4 | aclDataBuffer *dataBuffer = aclmdlGetDatasetBuffer(output, 0); // 根据index获取对应的dataBuffer void *data = aclGetDataBufferAddr(dataBuffer); // 获取data的Device指针 aclrtFree(data ); // 释放Device内存 aclUpdateDataBuffer(dataBuffer, nullptr, 0); // 重置dataBuffer里面内容,以便下次推理 |
size_t aclmdlGetOutputSizeByIndex(aclmdlDesc *modelDesc, size_t index)
参数名 |
输入/输出 |
说明 |
---|---|---|
modelDesc |
输入 |
aclmdlDesc类型的指针。 需提前调用aclmdlCreateDesc接口创建aclmdlDesc类型的数据。 |
index |
输入 |
指定获取第几个输出的大小,index值从0开始。 |
针对动态Batch、动态分辨率(宽高)的场景,返回最大档位对应的输出的大小;静态场景下,返回指定输出的大小。单位是Byte。