关于BPU核心使用的几点疑问,请帮助解答,非常感谢!

用户您好,请详细描述您所遇到的问题:

  1. 系统软件版本: (通过 cat /etc/version 获得):旭日X3派桌面版ubuntu 20.04系统
  2. 问题涉及的技术领域: (硬件、操作系统、驱动、其他)

我在技术资料中看到BPU双核推理的功能,里面有说到两个BPU核心可以共享混合使用,也可以相互独立隔离互不干扰来使用。这里,我想问的问题是:

1,在单路视频帧图像数据输入推理的时候,同时使用两个BPU核心来推理,这个是系统内部进行处理分配算力,编写推理使用的代码时不用考虑两个核心的使用问题。那么,当有两路视频帧图像数据输入推理的时候,在使用BPU核心的方式上有同步阻塞和异步处理两个方法,那么,如果使用同步阻塞的时候,两个BPU核心好像只能是相互独立互不干扰的来使用了,就不会考虑是双核混合使用还是独立隔离使用的方式了,不知道这样理解是否正确?

2,在有两路视频帧数据输入处理的时候,如果两个BPU核心相互独立隔离互不干扰的使用的时候,这个对于每一路视频帧数据推理来说,好像对任何一个BPU核心的使用中,同步推理和异步推理,好像都需要一帧一帧的排队来推理,因为两个BPU核心是各自独立使用的,每一个BPU核心一次只能输入一帧数据,当前帧数据没有推理完成,就不会处理下一帧图像数据,这样来说,同步和异步好像没有任何区别,不知道这样理解是否正确?

3,对于两路视频帧数据同时输入处理的话,两个核心是相互独立隔离使用,还是混合共享使用,应该是混合共享使用的时候,算力要利用的更完全一些吧,毕竟对一帧图像数据的推理来说,有时候快有时候慢,花费的时间是不一定相等的,那么当其中一个BPU核心处理完后,就可以立即处理输入中的一帧数据,不知道这样理解是否正确?对于两路独立的视频帧数据来说,不知道两个BPU核心是混合共享的方式要好,还是相互独立隔离的方式好?在相互独立隔离的使用中,同步方式和异步方式哪一个能更合理一些?

  1. 问题描述:(尽可能详细的描述在进行什么功能的开发或者测试,发现了什么问题,问题现象,并且提供预期的结果)

  2. 复现概率:(必现、高、中、低,并描述大致的概率数值) 已进行的排查措施、分析及结果:

  3. 硬件问题先排查供电和时钟

  4. 驱动问题先排查外设的供电、复位和时钟

  5. 功能异常,先排查一下是不是运行的代码和demo存在差异,修改不多的情况下直接用对比软件先对比

  6. 提供必要的问题日志:

  7. 软件上是否有做自定义修改:

感谢您使用地平线芯片算法工具链,最近我们在收集大家的满意度反馈,欢迎您填写问卷,详细情况可见:https://developer.horizon.ai/forumDetail/146177053698464782

  1. 同一帧,某一时刻的推理只会占用一个核,内部顺序执行模型拓扑图;两个核分别作为独立的计算资源,类似于linux的cpu资源的规划;当开启任意核调度时,系统会根据核的负载内部自动匹配到合适的核上进行调度;支持绑定核运行,指定核id则模型推理只会运行在某个核上;
  2. 模型的结构可能含有多个bpu节点,内部的调度是按照节点粒度去推理,达到dnn调度层面,就只有节点;BPU推理一定是一个节点一个节点的进行,但是不排除后一帧图像推理可能比前一帧要快(可以设置task优先级,模型多个节点可以往前插队,获得更高的推理优先级),也支持custom id priority,自定义优先级(如:时间戳)进行推理
  3. dnn推理都是异步的,使用WaitInferDone接口进行阻塞,获取模型推理结果
  4. 两个核心是独立的计算资源,不存在混合共享使用这个说法,他就是一个独立的计算资源;同一个bpu节点(硬件指令),多次执行时间偏差不会很大。
  5. 两路视频帧,可以自己管理BPU核的使用,也可以将BPU核使用调度交给底层;在资源充足情况下,两者没有区别,在BPU资源紧张情况下,用户需要自己设定自己的管理策略,哪些模型是高优、哪些是低优