1. aclrtSetDevice 使用不当导致内存泄露问题
对于Atlas 推理系列产品(Ascend 310P处理器),调用本接口会隐式创建默认Context,在标准形态下,该默认Context中包含2个Stream,1个默认Stream和1个执行内部同步的Stream。
参考网页:API参考-aclrtSetDevice
此接口需与aclrtResetDevice接口配套使用,以避免出现泄露。
实际使用中更建议用 Context,Context使用起来更灵活方便。
2. acldvppChannelDesc 释放方式不当导致内存泄露问题
实际测试中发现,acldvppChannelDesc 的释放需要先切换到对应的设备,如以下:
void VpcUtils::release() {if(context_){aclrtSetCurrentContext(context_);if (dvppChannelDesc_) {(void)acldvppDestroyChannel(dvppChannelDesc_);(void)acldvppDestroyChannelDesc(dvppChannelDesc_);dvppChannelDesc_ = nullptr;}aclrtDestroyContext(context_);} }
需要先做 aclrtSetCurrentContext(context_); 操作,否则会有内存泄露。