airockchip / librga

Apache License 2.0
300 stars 55 forks source link

[咨询]cvtcolor->letterbox使用dma会导致rknn_inputs_set耗时显著增加 #69

Open TRYOKETHEPEN opened 8 months ago

TRYOKETHEPEN commented 8 months ago

同样的视频帧输入, (1)当cvtcolor->letterbox使用virt_addr时,耗时约为: cvtcolor 1.2ms, letterbox 2.3ms, rknn_inputs_set 0.75ms, rknn_run 20ms, rknn_outputs_get 1.3ms (2)当cvtcolor->letterbox使用dma_fd,且不使用rga_handle时,耗时约为: cvtcolor 1.3ms, letterbox 2.1ms, rknn_inputs_set 15ms, rknn_run 24.5ms, rknn_outputs_get 1.3ms (2)当cvtcolor->letterbox使用dma_fd,且使用rga_handle时,耗时约为: cvtcolor 1.7ms, letterbox 2.2ms, rknn_inputs_set 15ms, rknn_run 20ms, rknn_outputs_get 1.3ms

问题: (1)为什么RGA进行cvtcolor、letterbox,使用dma_fd相比virt_addr并没有更快? (2)为什么使用dma_fd后,rknn_inputs_set耗时会增加那么多?是否与rknn_inputs_set只支持输入virt_addr有关?

TRYOKETHEPEN commented 7 months ago

使用RK3588,在模型输入图像letterbox缩放过程中,有imfill操作。 根据Q&A文档提到,imfill只能在RGA2核心上工作。 现在的问题是: (1)如果不alloc dma32 uncache heap, imfill时会有一大堆报错信息,但是还是能够正常填充灰色。此时rknn_inputs_set耗时极低。 (2)如果使用alloc dma32 uncache heap,imfill没有报错,也能够正常填充灰色。此时rknn_inputs_set耗时达到15~20ms。

TRYOKETHEPEN commented 7 months ago

使用RK3588,在模型输入图像letterbox缩放过程中,有imfill操作。 根据Q&A文档提到,imfill只能在RGA2核心上工作。 现在的问题是: (1)如果不alloc dma32 uncache heap, imfill时会有一大堆报错信息,但是还是能够正常填充灰色。此时rknn_inputs_set耗时极低。 (2)如果使用alloc dma32 uncache heap,imfill没有报错,也能够正常填充灰色。此时rknn_inputs_set耗时达到15~20ms。

“还是能够正常填充灰色”有误,是imfill失败后执行了memset(dst,color,get_iamge_size(dst_img))。 那一个解决方式就是,不使用dma,不使用imfill,直接通过memset填充灰色。