专栏算法工具链BPU API内存管理的问题

BPU API内存管理的问题

已解决
默认096322024-07-15
119
5

1. 芯片型号:J5

2. 天工开物开发包 OpenExplorer 版本: J5_OE_1.1.47

3. 问题定位:BPU内存管理API

4. 问题具体描述:想请教下hbSysAllocMem函数和hbSysAllocCachedMem函数分配的内存的区别,我看有个示例代码里是分配的BPU内存,有个是分配的缓存内存,它们的区别是在哪里呢,还有hbSysMemFlushFlag一共有两个数值,cache是只能在CPU和memory进行传输吗,为什么hbSysAllocCachedMem函数描述的是分配缓存的BPU内存,这个内存是在BPU上还是在缓存上。


算法工具链
征程5技术深度解析
评论3
0/1000
  • kotei左文亮
    Lv.3
     hbSysAllocCachedMem 和 hbSysAllocMem 来分配BPU读写内存。 其中 hbSysAllocCachedMem 表示分配可以被cache的内存, 并配套了 hbSysFlushMem 函数来对Cache进行刷新。

    Cache机制是由计算平台BPU的内存架构来决定的,详细参考如下图所示。CPU与主存之间存在的Cache会缓存数据,而BPU与主存之间则没有cache。 此时若错误使用Cache将会直接影响最终数据读写的准确性和效率。

    详细信息可参考OE包:9.1.8.1. 如何理解BPU内存Cache?


    2024-07-16
    1
    2
    • 默认09632回复kotei左文亮:

      cache内存是存放输入输出张量数据的内存吗,推理结束后,刷新cache,推理结果是不是就存放在了cache里,然后CPU就对输出结果进行后处理了?那么memory是拿来干嘛的呢,示例代码里好像对memory没有什么操作。

      2024-07-16
      0
    • kotei左文亮回复默认09632:

      当CPU写完数据后,需要主动将Cache中的数据flush到memory中,否则BPU会读取到之前的旧数据。

      而当BPU写完数据后,也需要主动将Cache中的数据invalidate掉,否则CPU会优先读取到之前缓存在cache中的旧数据。

      在模型连续推理过程中,输入输出建议申请带Cache的内存,以加速CPU反复读写的效率。

      2024-07-17
      0
  • kotei左文亮
    Lv.3

    问题已经关注,请稍等。

    2024-07-15
    0
    0
  • kotei左文亮
    Lv.3

    鉴于您长时间未回复,此问题就先关闭了。如还有疑问请再发帖求助。

    2024-07-22
    0
    0