用户
 找回密码
 立即注册
发表于 2010-9-8 10:09:39
1349212
本次活动结束,请下面ID列出的同学,将收件地址PM给我。便于奖品发放。

yyfn风辰
wayne5ning
门非流
cyrosly


活动说明:

金无足赤,人无完人,用在CUDA上也同样适用,即使强大如JAVA也有自己的不足。如何合理回避或者解决一些因CUDA自身的局限性导致的一些问题?例如CUDA中的原子操作是很耗时的,在哪些情况下,有哪些方法可以用其它办法替代原子方法?怎样将已有的串行算法高效的映射到CUDA编程模式上?怎样在性能和编码效率之间均衡等等。欢迎大家踊跃讨论,分享各自遭遇的CUDA局限性问题及解决办法。

本次活动我们将随机抽取参与讨论的网友6名,中奖的网友将获价值100元的罗技(Logitech)黑珍珠 超薄键盘




活动期间大家的讨论,将会有论坛助理不定时统计并统计更新在这里,跟帖灌水的一律不记录哦!

活动时间:2010.9.8-9.22

[ 本帖最后由 图腾部落 于 2010-9-25 15:54 编辑 ]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
使用道具 举报 回复
发表于 2010-9-9 10:20:26
本来读取全局存储器就非常耗时,在GT200架构上,由于没有缓存,全局存储器的原子操作非常慢,具体的程度和写冲突的密度和数量有关;但是共享存储器的原子指令要快的得多,因此在某些情况下,可以使用共享存储器的原子指令代替,SDK中的并行直方图统计就是这样做的;还可以将冲突的操作分开,将其存储于不同的位置,一个不确切的比喻就是:A和B决定去打C,但是他们觉得同时打的话,C会不明白谁打了他,所以A,B每个人打C的一半;另外还可以重复计算,这个往往和牛顿第三定律有关。
使用道具 举报 回复 支持 反对
发表于 2010-9-9 10:45:06
原帖由 yyfn风辰 于 2010-9-9 10:20 发表
本来读取全局存储器就非常耗时,在GT200架构上,由于没有缓存,全局存储器的原子操作非常慢,具体的程度和写冲突的密度和数量有关;但是共享存储器的原子指令要快的得多,因此在某些情况下,可以使用共享存储器的原子指令代替,SDK中的并行直方图统计就是这样做的;还可以将冲突的操作分开,将其存储于不同的位置,一个不确切的比喻就是:A和B决定去打C,但是他们觉得同时打的话,C会不明白谁打了他,所以A,B每个人打C的一半;另外还可以重复计算,这个往往和牛顿第三定律有关。


:right:
使用道具 举报 回复 支持 反对
发表于 2010-9-9 19:15:33
__global__里可以调用cublas的话就好了
使用道具 举报 回复 支持 反对
发表于 2010-9-9 20:41:21
为了提高全局内存的访问速度,数据尽量按行存储,需要按列操作时可以先对矩阵进行转置;
当要处理的矩阵宽度不是16的整数倍时,将其补为16的整数倍,或者用malloctopitch;
初学~~呵呵
使用道具 举报 回复 支持 反对
发表于 2010-9-9 21:59:03

回复 #5 我带刺 的帖子

应当是尽量按列存储吧!类似fortran.
目前最小的对齐单位是64字节,所以16个int 或者float是对的。当然使用cudaMallocPitch更好。
使用道具 举报 回复 支持 反对
发表于 2010-9-10 00:14:23

RE:如何回避或解决一些CUDA本身缺乏的功能导致的问题

我很想和大家讨论一下线程计算粒度的问题。按照编程指南上所说的,GPU中的线程尽量做小粒度的运算,但是这个“小粒度”小到什么程度不大理解。
      很多情况下,现有CPU算法的计算粒度都比较大,因此不能直接将CPU的执行流程搬到GPU上执行,而是要对此流程进行分解,让每次GPU调用内的线程的粒度减小。这涉及到分解的层次,即到底分解到什么程度。另外,有些问题不好分解。
      对于一些特殊问题,如循环计算问题,CPU流程可能是对于一个数据,做完所有操作,然后处理下一数据;在GPU上,可以考虑的处理方式是每个操作处理所有数据,然后做下一操作。
      我想,问题可分解的层次决定了它是否适合在GPU上运行吧?不知此说法是否合理。

[ 本帖最后由 wayne5ning 于 2010-9-10 00:37 编辑 ]
使用道具 举报 回复 支持 反对
发表于 2010-9-10 01:12:53
OPENCl的说明里面,可以按2048X2048X2048
的长宽高的每个像素点来改写屏幕,具体例子没有,如何在普通机器上面实现,比如3D引擎,比如《3D游戏编程大师技巧(中文版)》的GPU改造,加强密集个人计算应用移植的技术支援,比如视频处理,几乎没有说明和支持,必须自己摸索
使用道具 举报 回复 支持 反对
发表于 2010-9-10 16:09:56

回复 #7 wayne5ning 的帖子

这就是一个怎样将串行算法有效的映射到CUDA上了,分解的粒度和让所有的核心都运算在某种程度上会有冲突,要平衡。
使用道具 举报 回复 支持 反对
发表于 2010-9-16 22:26:16

怎样将已有的串行算法高效的映射到CUDA编程模式上的问题

对于解决一些问题用串行算法实现,再进行优化,这些难度都不是很大。但是映射到CUDA编程模式上的时候,需要受到线程的制约,现在只有一个GRID,而一个BLOCK里面最大的线程数量是512,虽然将来会有所加大,但是对于一些问题的解决还是受到线程的制约,在进行优化的过程中,会发现很多地方需要回避线程的局限性,比如说:稀疏矩阵(20000*20000)线性方程求解。
使用道具 举报 回复 支持 反对
12下一页
发新帖
您需要登录后才可以回帖 登录 | 立即注册