针对在实时选帧算法并行开发中,总结如下:
1.实现共享内存优化,规约法求和(再优化,单遍规约、注意二次调用规约时要考虑块内线程数是否为2的指数)。
2.代码中,再global内部写global实现多级并行策略。3.
4.由于并行不方便调试,在调试时,可以在核函数中限制输出一个线程执行下的变量值,进行验证。
5.
6.核函数调用核函数,多级并行(已试验很慢,100帧的数据量效果特别差。另外,100帧图像的for循环要尽量放在核函数内部(因为调用100次核函数很费时))。
7.多gpu(可以结合MPI策略)。
8.NPP、Thrust(可以用,结果一定要用主机内存存储,不能用设备内存。目前试验比较慢)、cublas库进行优化。
9.
10.排序算法可以并行优化。
11.每个块的最优线程数配置及最优分线程块数量(看收藏的CSDN、CUDA实战书上有种方法可以试)。
13.零拷贝内存(看方博客)、页锁定内存(可以用,速度有点提高)、流。
14.运行速度和图像的分辨率大小有关吗?并行情况下涉及到求和运算就有关了,图像小-分块少-求和快。
15.
16.所有求概率的算法,把概率放到CPU来求应该会快一些。