课程网站:https://www.bilibili.com/video/BV1Qc411J7DB?p=45&vd_source=60ffcefe479d27f859009dd3a47fcea1
这门课主要讲解了cuda中的常用函数与算法,并做了相关实验
reduce文件夹下面的代码展示了邻域求和 间域求和的方法,以及减少warp divergence的方法,不过gpu的用时一直在波动,啥子情况?计时函数有问题?
cuda会自动优化,所以减少了warp divergence以后的测试时间和不减少差不多。(咱也不清楚怎么关自动优化)
间域并行比领域并行快了很多,具体原因是啥? 可能是因为邻域并行的warp里有一半的线程不工作?
关于循环展开,展开2次比不展开提升很多,展开次数越多,效果越不明显,感觉展开4次或者8次就差不多了
将零拷贝内存和页锁定内存做了对比。
页锁定内存相比于零拷贝内存会慢一点,可能是慢在从主机内存拷贝到显存的时间了,注释掉页锁定的拷贝语句之后,确实是页锁定内存会快一点。
这时就要问了,看起来零拷贝比页锁定要快啊,那还要这个页锁定干嘛呢,当然是有用的,因为,零拷贝的内容不能缓存在显存里,如果内容要被反复使用,零拷贝就要不停地从内存里取值,增加总线压力,这样相比页锁定也就处于劣势。
我看的课程里面用的是__shfl ,不过好像现在都是用__shfl_sync,这俩好像没什么区别。
shuffle在我看来是跳过了共享内存实现通信,他允许一个线程直接读取另一个线程的寄存器。(以前都要传到共享内存然后再被读取)
有up,down,xor等操作,跑下代码大概就知道什么作用了