写点什么

征程 6|Cache 使用场景

  • 2025-06-15
    广东
  • 本文字数:841 字

    阅读完需:约 3 分钟

征程 6|Cache 使用场景

一、缓存机制基础

1.1 缓存类型对比

属性 Cache Buffer(缓存)No Cache Buffer(非缓存)是否经过 CPU cache 是否(直接访问内存)访问速度快(命中时)慢(每次都访问主存)数据一致性需要手动 flush/invalidate 自动同步,无需额外操作

1.2 典型应用场景

缓存缓冲区 :适用于高频 CPU 访问场景(如 AI 推理中间数据)


非缓存缓冲区 :适用于设备直传场景(如 DMA 数据流)

二、数据一致性问题深度解析

2.1 DMA-CPU 缓存协同问题

当 DMA 设备与 CPU 缓存系统协同工作时,可能引发以下同步异常:


场景现象后果 CPU 写入未 FlushDMA 读取到过期数据处理结果基于旧数据 DMA 写入未 InvalidateCPU 使用缓存旧数据计算逻辑错误并发访问未同步内存与缓存数据不一致系统稳定性风险


典型异常表现 :


感知输出图像中出现非连续绿色伪影(数据不同步导致的像素错位)


三、缓存管理技术方案

3.1 手动缓存控制接口

// CPU写入后执行Cache刷新(确保DMA获取最新数据)int32_t hb_mem_flush_buf_with_vaddr(uint64_t virt_addr, uint64_t size);
// DMA写入后执行Cache失效(确保CPU读取最新数据)int32_t hb_mem_invalidate_buf_with_vaddr(uint64_t virt_addr, uint64_t size);
复制代码

3.2 自动化缓存配置

1.输入缓冲区配置

"in_buf_noclean": 0 # 0=自动执行 flush(默认 1 不执行)


"in_buf_noncached": 0 # 0=使用缓存内存(默认)

2.输出缓冲区配置

"out_buf_noinvalid": 0 # 0=自动执行 invalidate(默认 1 不执行)


"out_buf_noncached": 0 # 0=使用缓存内存(默认)

四、配置策略建议

4.1 性能敏感场景

"in_buf_noclean": 1 # 关闭自动 flush


"out_buf_noinvalid": 1 # 关闭自动 invalidate


适用场景:高频数据流(>60fps 视频流)


注意事项:需配合手动缓存控制接口使用

4.2 数据安全场景

"in_buf_noclean": 0 # 强制自动 flush


"out_buf_noncached": 1 # 使用非缓存内存


适用场景:自动驾驶感知推理场景


性能影响:增加约 15-20%的 CPU 开销

五、最佳实践指南

混合使用策略 :对处理流水线中的中间缓冲区采用 Cache Buffer,终端输出使用 No Cache Buffer


批处理


用户头像

还未添加个人签名 2021-03-11 加入

还未添加个人简介

评论

发布
暂无评论
征程 6|Cache 使用场景_自动驾驶;_地平线开发者_InfoQ写作社区