免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1581 | 回复: 0
打印 上一主题 下一主题

CUDA编程琐碎事 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-12-27 22:20 |只看该作者 |倒序浏览

                最近大半个月一直在写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是个什么东西。
最后最后,一定不要用串行的头脑去考虑并行的问题,一旦程序并行,什么执行顺序都是可能的,该同步的地方同步,该原子操作的地方原子操作。先保证程序正确了,然后再考虑程序的改进~
               
               

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u3/104586/showart_2132314.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP