|
情况如下:
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: ==============================================
相关代码如下:
- //init
- rknn_devices_id devids;
- ret = rknn_find_devices(&devids);
- printf("n_devices=%d\n", devids.n_devices);
- int npu_id = thread_id % devids.n_devices;
- rknn_init_extend extend;
- extend.device_id = devids.ids[npu_id];
- rknn_context ctx = 0;
- ret = rknn_init2(&ctx,model,model_len,RKNN_FLAG_PRIOR_MEDIUM,&extend);
- // ret = rknn_init(&ctx,model,model_len,RKNN_FLAG_PRIOR_MEDIUM);
- if(ret < 0) {
- printf("rknn_init fail! ret=%d\n", ret);
- return;
- }
- else
- {
- printf("using npu:%d,%s \n", npu_id, devids.types[npu_id]);
- }
|
|