图像处理流相关问题:
1:异步并行时,cudaMemcpyAsync的缓冲区要用Pinned分配,直接用普通内存无效果:
Pinned memory (分页锁存器):
cuda运行时提供了使用分页锁定主机存储器(也称为pinned)的函数(与常规的使用malloc()分配的可分页的主机存储器不同):
cudaHostAlloc()和cudaFreeHost()分配和释放分页锁定主机存储器;
cudaHostRegister()分页锁定一段使用malloc()分配的存储器。
2在cudaMemcpyAsync后直接对目标变量进行操作会有一定几率出错
3当gpu处理时间与cpu读取时间相近时可以在host端上启动两个以上线程(或者更多数量–如果你喜欢的话)来将cpu读取时间掩盖掉,每个线程里面独自的逻辑线.
4如果CPU读取时间过长,GPU处理时间较短如,那么优化的时间是读写时间,GPU处理的时间被掩盖,而试图达到这点, 需要你至少启动2个CPU线程, 每个里面单独的一条逻辑线(读取文件, 处理, 回写),继续优化GPU就无意义了
举例子:如果你读写文件需要100ms,kernel需要10ms,上500次处理过程,而不是500 * 10ms,更长的时间能掩盖更短的(在合理的安排下)
5关于测试环境:你如果要测试. 得弄点真实的测试环境.例如你原本如果是传过来的视频帧, 例如从网络, 而不需要磁盘IO,那么请提供一个这样的环境,否则用从磁盘读写文件得到的效果无意义,测试环境么,必须上尽量一样的,你用个不同的东西测试, 最终生产的时候完全不是一回事.
时间: 2024-10-09 04:00:39