【产品】地平线X3开发板内存详解:bpu内存及相关接口&如何通过命令查看对应内存


一. bpu内存以及相关接口
地平线X3开发板中,芯片架构是Bernoulli2,在Bernoulli系列芯片的架构中,BPU和CPU共享同一个memory空间,如下图:
由于BPU需要使用物理空间连续的一块内存,因此runtime库提供专门的接口用来申请bpu内存,该接口返回申请到的memory地址(包括物理地址和虚拟地址),其中bpu虚拟地址可以被CPU直接读写,在后续执行BPU操作时也是传入虚拟地址。
且CPU与主存之间存在的cache会缓存数据,而BPU与主存之间没有cache,不过bpu的内存接口实现中也可以有cache,不过cacheable的bpu内存的cache与CPU cache机制不同,这种差别导致了cpu读写bpu内存时需要符合某种约束才行。具体来说,针对CPU读写 cacheable 的bpu内存,需要注意如下两项事项:
1. 对于CPU写bpu memory的场景,由于数据会缓存到cache中,导致memory中的数据是旧,这样BPU执行模型的时候取的数据就是错的。因此需要把cache中的数据flush到物理memory中,这时候就需要使用HB_SYS_BPU_MEM_CACHE_CLEAN参数调用HB_SYS_flushMemCache接口。
2. 对于CPU曾经读取过bpu memory的场景,数据有可能在之前被缓存到cache中。这时如果BPU写了这块memory,那么CPU在读取数据时仍然从cache中读,这样就会导致CPU读到老旧的数据。这时候就需要把cache中读取得数据清理掉,需要使用HB_SYS_BPU_MEM_CACHE_INVALIDATE参数 调用HB_SYS_flushMemCache。
Tips:
对于模型的输入内存,可以不用设置cacheable,因为通常模型的input只会被读取一次。
对于模型的输出内存,则有必要设置cacheable,因为后处理会多次读取输出内存,这样能够利用cache缓存,提高访问速度。
以上便是开发板中内存相关的说明,runtime库提供如下接口来申请/刷新/释放bpu内存:
// memory api
/*
* \brief alloc bpu memory for input and output of model,
* flag cachable indicates whether a cache is required.
*/
int HB_SYS_bpuMemAlloc(const char *name,
size_t alloc_mem_size,
bool cachable,
BPU_MEMORY_S *mem);
#define HB_SYS_MEM_CACHE_INVALIDATE (1) // flush memory to CPU
#define HB_SYS_MEM_CACHE_CLEAN (2) // flush CPU to memory
/*
* \brief flush cache with flag.
* HB_SYS_MEM_CACHE_INVALIDATE should be used after write,
* and HB_SYS_MEM_CACHE_CLEAN should be used before read .
*/
int HB_SYS_flushMemCache(const BPU_MEMORY_S *mem, int flag);
/*
* \brief query memory whether is cachable or not.
*/
int HB_SYS_isMemCachable(const BPU_MEMORY_S *mem);
/*
* \brief free bpu mem.
*/
int HB_SYS_bpuMemFree(BPU_MEMORY_S *mem);
具体的接口说明请参考开发包中的BPU SDK API文档,在此不再赘述。
二. 开发板内存说明
下面介绍开发板中,如何通过命令查看对应内存。
在X3开发板中,bpu和vio等硬件使用内存,采用的是cma机制,以系统0922镜像为例,通过cat /sys/class/misc/ion/cma_carveout_size 命令和 memstat命令获取结果,如下图:
其中,reserved的45484K为系统所用,不可被应用所用。 cma-reserved为704512K,是cma内存;available为296528K,是CPU内存,为防止误解,记为available内存,这个类型内存也是kernel唯一可用的内存。
704512K的cma内存中,被分割出去272MB内存预留给bpu/vio专用(cma_carveout_size大小的内存),这个预留是只能给bpu/vio用,剩下的(704512K-272MB)=416MB 可被bpu、cpu和vio共同使用。
cpu使用内存时,会随机从cma内存和available内存申请。
然后通过free命令,获得结果如下图:
free命令输出,第二行的used的374180K,其中就包含了预留的272MB的cma内存,也就是cma_carveout_size大小的内存的使用情况会在used列中体现。
根据上面的分析,可以得到0922 x3镜像的内存示意图:
其中,cpu在进行memory malloc调用时,会随机从available和cam中分配内存(一半一半的概率)。
而bpu会优先从carve out分配内存,等到不够时,会从cma中分配,当cma中可用内存不够的情况下,kernel会将cma中被cpu占用的内存数据搬运到available,从而腾出cma空间给bpu使用,如果没有足够的available容纳腾出的数据,会报bpu分配失败的错误。
以上便是X3开发板的内存的一个大概介绍。
- |
- +1 赞 0
- 收藏
- 评论 0
本文由zc转载自地平线,原文标题为:关于X3开发板内存的介绍,本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。
相关推荐
地平线发布具有4核ARMA53处理能力的X3派AI开发平台,支持H.264/H.265编解码和5Tops端侧推理|视频
地平线旭日®️X3派是一款面向生态开发者的嵌入式AI开发板,接口兼容树莓派,具有5Tops端侧推理与4核ARMA53处理能力。可同时多路CameraSensor的输入并支持H.264/H.265编解码。
地瓜创客孵化营 | 让每一块 RDK X5,都成为你手中的机器人!
地瓜机器人开发者日就要来啦!面向智能计算与机器人解决方案的通用型开发板新品RDK X5,接口丰富,极具性价比,具有10T算力,与强大的图像处理能力,助力开发者轻松实现多种智能应用。加入“地瓜创客孵化营”你将和一群“地瓜创客”一起找到将你的开发板转变为智能机器人的最佳路径。
【经验】地平线X3M SDB开发板烧录ubuntu镜像实操和注意事项
地平线X3M SDB开发板,地平线论坛已经支持yocto linux和ubuntu两种SDK包,本文实操烧录ubuntu镜像以及说明注意事项。
【经验】地平线X3开发板使用指南
本文主要讲述地平线X3开发板的使用说明,主要包含:1.了解X3开发板;2.烧写镜像;3.串口或网口登陆开发板;4.uart烧写【uboot被擦除时使用】。
【经验】地平线开发板J3刷机问题及操作记录
本文介绍了在地平线J3开发板上面完成刷机以及跑通AI-Express的demo过程中遇到的问题并详细讲解。首先先刷efuse;刷完之后,利用串口进去改一下板子ip;最后按照github上编译AI-Express。
我们在参考地平线X3M SDB开发板设计原理图时,发现SD2的电源域是3.3V,而我司需要把SD2功能复用为GPIO功能,并且是1.8V输出的,这里需要怎么改。
SD2的电源域可以通过寄存器0xa6004170来修改为3.3v/1.8v,复用为GPIO功能后点输出电压也是由SD2的电源域提供的电压。
【经验】地平线X3M开发板添加dummy_codec虚拟声卡驱动的方法
一个完整的声卡信息由cpu_dai,codec_dai,platform,dai_link组成。本文将详细介绍地平线X3M开发板添加dummy_codec虚拟声卡驱动的方法。
【经验】地平线旭日x3开发板入门教程介绍
本文对地平线旭日x3开发板做入门介绍,第一步点亮系统,第二步配置交叉编译环境,最后进行示例测试。x3开发板达到了实时性要求,精度也不错。
地平线X3M开发板有相对应的硬件压测工具吗?
地平线SDK提供相应的针对硬件的压测工具,包括X3M芯片,DDR,EMMC,网口,USB等。
【经验】地平线X3M开发板上AP6212模组的Wi-Fi功能使用方法
地平线X3M开发板上的AP6212模组是一种低成本、低功耗的模组,集成有WiFi,蓝牙和FM功能,广泛应用到智能手机和便携式设备中。本文主要介绍AP6212 WiFi功能的使用方法。
一款新的sensor模组接上地平线X3M开发板,点不亮是什么原因?
1. 需要检查模组的mipi管脚和开发板的mipi接口是否一致,用万用表测试1.2V, 1.8V,3.3V电压是否正常; 2. 确保硬件OK后,可以根据串口报错的信息和地平线的文档对照做进一步分析。
【经验】地平线X3M开发板烧录镜像的方法
X3M开发板是集成了地平线X3 AI处理器的一个开发板形态产品,支持多路摄像头输入,提供5T算力,提供丰富的标准硬件接口,搭载地平线“天工开物”软件栈,可用于客户快速开发、开发者方案验证等场景。本文主要介绍地平线X3M开发板烧录镜像的方法。
【经验】地平线X3M开发板上电从HDMI输出不了图像的问题分析
地平线X3M开发板含有一路HDMI接口,最大支持1080P30视频输出,正常情况下HDMI默认是关闭的,但是在很多应用场景下客户需要使用HDMI,那么需要对开发板进行软件配置。本文将介绍地平线X3M开发板上电从HDMI输出不了图像的问题分析。
【经验】如何进行地平线X3M开发板的USB驱动性能测试?
地平线X3M开发板针对常见的高速接口,比如ddr, emmc, usb, sdio等提供了相应的测试方法,这样可以保证数据高速传输的稳定性和可靠性。下面是USB驱动性能测试方法。
电子商城
现货市场
服务

提供7~27寸工控机定制,支持嵌⼊式/ 壁挂式 /桌⾯式/悬挂式等安装方式,采用纯平⾯板IP65防尘防⽔等级,莫⽒7级硬度触摸屏,兼容多种操作系统:组态软件/安卓/XP/win7/8/10/Linux等,支持主板、接⼝、外观、⽀架、刷卡器、⾝份证阅读器、LOGO、⻨克⻛、系统、电池、蓝⽛、4G/5G、摄像头、GPS系统、⼆维码扫描器、指纹等特殊应⽤场景定制
最小起订量: 1台 提交需求>
登录 | 立即注册
提交评论