模型作用:人脸检测,人脸关键点检测
模型:fd.param fd.model,fl.param fl.model
设备1:ARM A53 2.0GHz, IMG GE 8300
OnePlus6T :Snapdragon 845, Adreno 630
FD Param | FD Model | FL Param | FL Model | |
size | 10kb | 509.6kb | 46kb | 2.5mb |
FD Param | FD Model | FL Param | FL Model | |
设备1(FD-CPU & FL-CPU) | 1.6ms | 17.1ms | 5.0ms | 10.0ms |
设备1(FD-GPU & FL-GPU) | 32.7s | 56.1s | 32.6s | 83.4s |
OnePlus6T(FD-CPU & FL-CPU) | 3.8ms | 21.3ms | 6.5ms | 22.8ms |
OnePlus6T(FD-GPU & FL-GPU) | 4.8s | 13.3s | 4.9s | 19.7s |
Load Param/Model 高耗时问题,主要有两个操作
- 代码定位pipeline.cpp 469行:
VkResult ret = vkCreateComputePipelines(vkdev->vkdevice(), 0, 1, &computePipelineCreateInfo, 0, &pipeline);
- 代码定位pipeline.cpp 98行:
int ret = resolve_shader_info(spv_data, spv_data_size, si);
- 关于 vkCreateComputePipelines 的操作
- 目前该操作占据运算时间45%
- 且在create pipeline过程中调用次数非常多,本身耗时在设备1上超过10ms
- 如何优化该函数?
- 关于 resolve_shader_info(在线编译)的操作
- 目前该操作占据运算时间45%
- 优化方案一:采用shader的离线编译,OnePlus6T上显示能够提升5倍的速度;
- 优化方案二:在离线基础上,计划通过删除没有用到的shader来加快pipeline的创建;
- 优化方案三:加入pipecache机制,同比之前 load param 降低 8s,load model降低50-80s,pipeline cache效果很明显
- 单独Load FL model (GPU)
- Load FD(GPU) & FL(GPU)
- Load FD(CPU) & FL(CPU)