最近大半个月一直在写GPU上的并行蚁群算法,差不多半个月的时间,CUDA也学的小有心的,算法基本可以跑通了,后面有时间我会写一个CUDA编程系列和蚁群算法系列的文章。这里先放一个简单的图吧:
关于CUDA编程,有一些小的Tips和大家分享一下:
(1)并行程序主要是将循环进行拆解,CUDA里面的每一条线程可以对应为每一次循环,在这里,要求每次循环都不依赖于上一次循环的结果。举个例子:将有100个元素的数组中的每个元素加上1,再赋值到另一个数组中去的时候,串行就一个for循环,并行的话就一条语句 B[tid] = A[tid]+1, tid为线程号,每个线程都取一条数据,加上1之后赋值到B中对应的位置。其实并行就这么简单!
(2)关于编CUDA程序建议大家都先了解一下GPU的存储结构,《GPU高性能计算之CUDA》这本书用来入门还是不错的。我写程序的时候那个存储结构图一直就贴在电脑旁边。
(3)当对程序有些理解之后,下一步一定要搞明白的是并行里面常用的规约算法和前缀和算法,这两个算法几乎是随处可用。一定要理解这两个算法。
(4)关于调试,没有什么好的调试方法,最好的就是不断的输出,将显存里面觉得有问题的空间拷贝出来看看
(5)一定要理解GPU中线程是怎样的顺序执行的。要理解Wrap是个什么东西。
最后最后,一定不要用串行的头脑去考虑并行的问题,一旦程序并行,什么执行顺序都是可能的,该同步的地方同步,该原子操作的地方原子操作。先保证程序正确了,然后再考虑程序的改进~
阅读(835) | 评论(0) | 转发(0) |