昇腾学院 | 案例分享 VPC批量处理图片失败问题

举报
xiongoal 发表于 2020/03/27 16:57:10 2020/03/27
【摘要】 问题现象描述问题现象:在C30B890版本,人脸识别业务中批量处理图片,处理一定数量图片后出现异常现象,如下图所示,处理37486张图片后senddata时延过大:Device端异常日志如下: 关键过程、根本原因分析关键过程:1、host端使用HIAI_DMalloc申请内存分别加载一个图片库的图片,进行批量处理。2、使用高速序列化函数进行跨侧传输图片数据,解码和缩放功能的输入内存都是由框架...

问题现象描述

问题现象:在C30B890版本,人脸识别业务中批量处理图片,处理一定数量图片后出现异常现象,如下图所示,处理37486张图片后senddata时延过大:

1.png


Device端异常日志如下:


 2.png3.png


关键过程、根本原因分析

关键过程:

1、host端使用HIAI_DMalloc申请内存分别加载一个图片库的图片,进行批量处理。

2、使用高速序列化函数进行跨侧传输图片数据,解码和缩放功能的输入内存都是由框架自动申请,缩放功能的输出内存使用HIAI_DVPP_DMalloc申请内存。

3、批量处理一些图片后出现异常,图片无法正常进行解码,日志显示“Cannot allocate memory”。

4、通过检视代码,HIAI_DVPP_DMalloc申请的内存未进行正确释放,需要在析构函数里面添加HIAI_DVPP_DFree

5、修改代码后,重新编译运行,发现VPC的缩放功能失效,日志显示“fail_count<(15)”。

6、通过日志信息定位原因,前期调试多次输入参数或地址异常,触发硬件保护机制,隔离了VPC功能,需要重启解决。

根本原因分析:

1、出现“Cannot allocate memory”异常日志,主要是HIAI_DVPP_DMalloc申请的内存没有正确释放。

2、出现“fail_count<(15)”异常日志,主要是在调试代码的时候,多次输入参数或地址异常,触发了硬件保护机制。


结论、解决方案及效果

结论:

1HIAI_DVPP_MAlloc使用智能指针存放申请的内存地址,必须指定析构器为HIAI_DVPP_DFreeHIAIMemory::HIAI_DVPP_DFree

2、调试多次输入参数或地址异常,触发硬件保护机制,这个需要重启就可以解决。

解决方案:

经验总结、预防措施和规范建议

如果调用HIAI_DVPP_MAllocHIAIMemory::HIAI_DVPP_DMalloc接口申请内存,用于DeviceHost的数据传输时,由于HIAI_DVPP_MAllocHIAIMemory::HIAI_DVPP_DMalloc没有自动释放标签,所以一定需要调用HIAI_DVPP_DFreeHIAIMemory::HIAI_DVPP_DFree接口手动释放内存。如果使用智能指针存放申请的内存地址,必须指定析构器为HIAI_DVPP_DFree或者HIAIMemory::HIAI_DVPP_DFree


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。