首页 文章 精选 留言 我的

精选列表

搜索[网站开发],共10000篇文章
优秀的个人博客,低调大师

CANN开发实践:4个DVPP内存问题的典型案例解读

摘要:由于DVPP媒体数据处理功能对存放输入、输出数据的内存有更高的要求(例如,内存首地址128字节对齐),因此需调用专用的内存申请接口,那么本期就分享几个关于DVPP内存问题的典型案例,并给出原因分析及解决方法。 本文分享自华为云社区《FAQ_DVPP内存问题案例》,作者:昇腾CANN。 DVPP是昇腾AI处理器内置的图像处理单元,通过AscendCL媒体数据处理接口提供强大的媒体处理硬加速能力,主要功能包括图像编解码、视频编解码、图像抠图缩放等。 由于媒体数据处理功能对存放输入、输出数据的内存有更高的要求(例如,内存首地址128字节对齐),因此需调用专用的内存申请接口,那么本期就分享几个关于DVPP内存问题的典型案例,并给出原因分析及解决方法: 使用错误的DVPP内存申请接口,导致应用程序报错并退出 内存大小不符合DVPP的要求,导致应用程序报错并退出 DVPP内存被提前释放,导致视频流解码输出的图像异常 DVPP读/写内存地址无效,导致应用程序异常中断 01 使用错误的DVPP内存申请接口,导致应用程序报错并退出 现象描述 从日志存放路径(默认为“$HOME/ascend/log”)下获取运行应用程序的日志,日志中的报错示例如下: device:0 chn 0, input buffer is invalid, make sure it has been allocated with hi_mpi_dvpp_malloc or acldvppMalloc. device:0 chn 0, output buffer is invalid, make sure it has been allocated with hi_mpi_dvpp_malloc or acldvppMalloc. 可能原因 根据日志提示,是因为没有使用指定的接口申请内存,导致内存地址校验出错。 由于DVPP媒体数据处理功能对存放输入、输出数据的内存有更高的要求(例如,内存首地址128字节对齐),因此需调用专用的内存申请接口,如下: 调用媒体数据处理V1版本的接口对图片进行抠图、缩放等操作时,调用acldvppMalloc接口申请内存。 调用媒体数据处理V2版本的接口对图片进行抠图、缩放等操作时,调用hi_mpi_dvpp_malloc接口申请内存。 处理步骤 检查代码,确认在DVPP媒体数据处理的各功能中,是否使用acldvppMalloc接口/ hi_mpi_dvpp_malloc接口申请存放输入或输出数据的Device内存。 但需注意: 可将DVPP媒体数据处理的输出作为模型推理的输入,从性能角度,减少拷贝,实现内存复用。 由于DVPP媒体数据处理访问的专用地址空间有限,为确保媒体数据处理时内存足够,除媒体数据处理功能外,其它使用Device内存的功能,建议调用aclrtMalloc接口申请内存。 02 内存大小不符合DVPP的要求,导致应用程序报错并退出 现象描述 从日志存放路径(默认为“$HOME/ascend/log”)下获取运行应用程序的日志,日志中的报错示例如下: buffer size(3110400) is smaller than need buffer size(4147200) when format is 3. device 0, vpc end address is illegal, check allocated buffer size: configured buffer size: 3110400, current pic: format 3 width_stride 1920 height_stride 1080. 可能原因 虽然使用了正确的DVPP内存申请接口,但: 代码中申请的内存大小小于该格式所需的输入或输出内存大小; 或者传入接口的内存大小正常,与输入格式也匹配,但是超出了实际申请的内存大小,所以校验出来结束地址非法。 处理步骤 1. 进入昇腾文档中心(https://www.hiascend.com/zh/document),拖动到“推理”区域,通过API参考进入最新版本的文档(或者可以在左上方选择需要的版本),在媒体数据处理章节,根据DVPP各功能对内存大小的要求,检查代码中对应格式的内存大小是否正确; 2. 在代码中增加打印内存长度的日志,检查传入接口的内存大小是否与实际申请的内存大小一致。 03 DVPP内存被提前释放,导致视频流解码输出的图像异常 现象描述 原始H264/H265每一帧视频流正常,解码过程无异常(无异常日志),仅输出图片有异常。 可能原因 解码过程无异常,说明送入的视频码流不是异常码流,仅输出被破坏,可能由于: 输出内存被复用、被踩或者被提前释放; 解码需要的输出内存比实际申请的内存大。 处理步骤 对于DVPP内存申请接口,增加日志打印内存大小及地址,检查VDEC输出内存,检查申请的内存大小是否与实际使用的一致,比如典型的错误场景,VDEC解码输出格式预期是RGB,实际仍按照YUV420SP申请内存。 在DVPP内存释放接口处、以及hi_mpi_vdec_get_frame/aclvdecCallback/acldvppJpegDecodeAsync接口处,增加内存大小及地址的打印日志,确认内存释放时序,是否存在内存地址解码完成前被提前释放的情况。 04 DVPP读/写内存地址无效,导致应用程序异常中断 现象描述 从日志存放路径(默认为“$HOME/ascend/log”)下获取运行应用程序的日志,Device侧内核态日志报错图像处理模块异常,报错示例如下: vpc get err int: vpc_cvdr_axi_rd_resp_err vpc get err int: vpc_cvdr_axi_wr_resp_err 可能原因 cvdr_axi_rd_resp_err:表示读地址越界,可能申请的输入内存太小或内存地址无效,昇腾AI处理器执行读操作时访问到了无效地址。 cvdr_axi_wr_resp_err:表示写地址越界,可能申请的输出内存太小或内存地址无效,昇腾AI处理器执行写操作时访问到了无效地址。 处理步骤 1. 在申请DVPP内存的接口处、以及在异常任务接口处增加日志打印,检查申请的输入\输出内存大小与实际使用的输入\输出内存大小是否一致; 2. 在释放DVPP内存的接口处增加打印日志,检查任务完成之前是否存在内存被提前释放的情况。 05 更多介绍 [1]昇腾文档中心 [2]昇腾社区在线课程 [3]昇腾论坛 点击关注,第一时间了解华为云新鲜技术~

优秀的个人博客,低调大师

JeeSite V5.3.1 发布,BPM 多项更新,Java 快速开发平台

升级内容 升级 spring boot 2.7.10 新增 mybatis.scanTypeAliasesBasePackage 配置,减少启动时间 新增 JoinTable 的 lazy 懒加载属性,标记为懒加载的,默认不进行联表,当需要时再联表 新增 js.cookie 默认存 localStorage,可通过 window.cookieToLocalStorage 关闭默认 新增 oauth2.callbackUrl 回调后的跳转地址(可自定义vue版的账号绑定) 新增 子表编辑的另一种实现例子beetl(当点击行的时候开启编辑状态) 新增 BPM 多实例加减签,串行加减签、并行加减签 新增 BPM 模型的数据对象,在启动流程时作为默认流程变量 新增 BPM currentCmd 线程变量,并优化新增一些 CMD 的类型 优化 BPM 模型的字符串变量中包含逗号的时候自动转换为List,如果增加单引号或双引号,可强制为字符串 优化 BPM 下一步处理人逻辑,并行场景下不影响其他并行任务的节点;会签节点执行人与设置人数相等时自动设定每个会签人。 优化 BPM 退回、撤回、自由流跳转逻辑:并行内的节点跳转,不影响其它并行中的任务;并行内向外跳转,不影响流程正常结束;并行外向内跳转,不影响并行中其它任务,只处理跳转的节点所在串行节点 优化 BPM 撤回,支持退回的任务进行撤回操作;支持并行向内向外会签等的撤回 优化 BPM 自由流,支持选择多节点跳转,适应于并行流程的场景 优化 BPM 工具 BpmUtils.isCurrentCmd 支持获取线程变量里存储的数据 优化 BPM 默认不继承上级任务的优先级,根据需要模型里设置,或每次审批的时候根据需要指定 优化 Cloud 下 避免同时依赖 bpm-rest 和 bpm-client 导致的 BpmUtilsEntity 类冲突问题 优化 文件管理,防止还未上传完成的时候就点击了确定,导致没有上传成功的问题beetl 优化 dataGrid 当没有指定src并锁定表格高度的时候,点击增行按钮后自动滚动到底部 优化 Job 作业调度列表中,增加未启动定时器的时候不能立即运行一次的要求 优化 OSS 对象存储的时候,上传增加 contentType 设置 优化 CMS 各种 url 生成调用,简化网页模板 修正 BPM 并行退回时,有时候会没有产生下一步任务或流程没有结束问题 修正 BPM 模型删除的提示信息,修复点击下载xml时,不下载文件问题 修正 oauth2 绑定账号后的没有跳转到 vue 页面的问题 修正 Cloud 下 BpmEntity 的 id 丢失问题 升级 JeeSite Cloud 社区版,可以商用。 Vue分离端 新增 模块管理增加工程代码生成功能界面 新增 Upload 文件上传的必填验证实例 新增 BPM 会签任务加签减签功能界面 新增 Tabs 表单,拆分表单表单示例 优化 远程表单验证,减少请求频率 优化 treeselect 增加虚拟滚动 优化 showMessage 方法中包含大文本的时候自动切换到 showMessageModal 修正 Table 当子表滚动条拖拽到最右边的时候,不提示表单验证消息问题 #I6LM2N 修正 Upload 子表附件有时候会串的问题 #I6LIGF 修正 DatePicker 不是中文问题 #I6N7DU 修正 codemirror 代码组件的错误 升级方法 修改pom.xml文件中的jeesite-parent版本号为5.3.1-SNAPSHOT 如果你修改了parent、common、core项目源码,请与git上的代码进行同步 如果你是跨版本升级,请注意每一个版本的升级方法,业务上有调整的地方进行修改 执行root/package.bat(sh)打包脚本,强制更新依赖。 Vue分离端升级 请与jeesite-vue代码仓库源码进行同步,合并代码,手动解决冲突代码。 匹配后端版本为JeeSite v5.3.1,可以兼容JeeSite v5.1.0+ 了解更多 JeeSite 官网地址:http://jeesite.com JeeSite 在线文档:http://docs.jeesite.com JeeSite 演示地址:http://demo.jeesite.com JeeSite Vue 演示地址:http://vue.jeesite.com JeeSite 源码仓库:https://gitee.com/thinkgem/jeesite4 JeeSite Vue 前端源码:https://gitee.com/thinkgem/jeesite-vue JeeSite 跨平台手机端:https://gitee.com/thinkgem/jeesite4-uniapp JeeSite Cloud 微服务:https://gitee.com/thinkgem/jeesite4-cloud JeeSite 客户端安装程序:https://gitee.com/thinkgem/jeesite-client

资源下载

更多资源
Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册