Toybrick

被动模式多计算棒无法使用

碧的绿

新手上路

积分
17
发表于 2020-11-14 15:52:28    查看: 333|回复: 2 | [复制链接]    打印 | 显示全部楼层
情况如下:
1,操作系统重启后,进程A使用npu0,退出后进程A使用npu0,一直正常。
2,操作系统重启后,进程B使用npu1,退出后进程B使用npu1,一直正常。
3,操作系统重启后,进程A使用npu0,退后后进程B使用npu1,一直阻塞在初始化rknn_init2的地方。反复测试,只要使用了两个npu,程序必定阻塞,除非重启。
4,操作系统重启后,进程A使用两个线程,分别使用npu0和npu1,则后面初始化的线程无法完成初始化。

硬件环境:
主板为第三方3399pro,计算棒为1808S0。咨询过主板厂商,他们无法给出解答,让我们请求瑞芯微官方支持。
npu_transfer_proxy版本为:
http://repo.rock-chips.com/rk180 ... /npu_transfer_proxy

Transfer version 2.0.0 (8f9ebbc@2020-04-03T09:12:43)


n_devices=2
D RKNNAPI: ==============================================
D RKNNAPI: RKNN VERSION:
D RKNNAPI:   API: 1.3.3 (f20f0bd build: 2020-05-14 14:14:51)
D RKNNAPI:   DRV: 1.3.1 (6ebb4d7 build: 2020-01-02 09:37:58)
D RKNNAPI: ==============================================

相关代码如下:

  1.         //init
  2.         rknn_devices_id devids;
  3.         ret = rknn_find_devices(&devids);
  4.         printf("n_devices=%d\n", devids.n_devices);

  5.         int npu_id = thread_id % devids.n_devices;
  6.         rknn_init_extend extend;
  7.         extend.device_id = devids.ids[npu_id];
  8.         rknn_context ctx = 0;
  9.         ret = rknn_init2(&ctx,model,model_len,RKNN_FLAG_PRIOR_MEDIUM,&extend);

  10.         // ret = rknn_init(&ctx,model,model_len,RKNN_FLAG_PRIOR_MEDIUM);
  11.         if(ret < 0) {
  12.                 printf("rknn_init fail! ret=%d\n", ret);
  13.                 return;
  14.             }
  15.                 else
  16.                 {
  17.                         printf("using npu:%d,%s \n", npu_id, devids.types[npu_id]);
  18.                 }
复制代码



回复

使用道具 举报

碧的绿

新手上路

积分
17
 楼主| 发表于 2020-11-18 14:35:21 | 显示全部楼层
补充一下,在pc上使用两个计算棒,同样的代码可以正常运行。
回复

使用道具 举报

hulk

新手上路

积分
36
发表于 2020-12-1 16:19:11 | 显示全部楼层
请问,该问题是否已经解决了,我也想使用3399pro + 1808S0(被动模式)的方案,不知道会不会有风险?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

产品中心 购买渠道 开源社区 Wiki教程 资料下载 关于Toybrick


快速回复 返回顶部 返回列表