Posts Tagged ‘ GPGPU

谈GPGPU和CUDA技术

这篇档是去年6月份就写好的了,现在发过来,当时的看法以现在的眼光来看,还是显得稚嫩,当然我现在也很稚嫩,如有错误请多多指正.
;-)

毫无疑问 CUDA或者GPGPU是带给业界的一次计算的革命.
非常出色的并行计算能力,这是带给我们最明显的特点.

当然,请不要混淆概念,目前的GPU架构来说是不可能取代CPU的.
CUDA或者GPGPU来说不是全部.

并不是任何情况都适合GPGPU或者CUDA,在串行非常多的情况下,是不适合用CUDA来做的.
CUDA只能适合高度并行的地方,并且对数据精度要求不高的地方.
目前CUDA的环境来说,只有GT200芯片才能支持double数据类型,其他所有芯片G9X和G8X系列都不支持double数据类型,仍然在32 位,这对一些高精度的数据类型来说是一个很难办的事情,而且GT200芯片对于double的运算性能非常差(64bit运算单元在每个SM中只有一个, 因此运算速度只有32bit数据的八分之一到十二分之一左右.),不过NVIDIA已经在GT300中大幅加强了双精度的计算性能.
Read more

在OpenGPU组织上面关于我的文章”由IBM停止Cell研发而想到的异构计算与CUDA GPGPU”的讨论.

文章被转载到了OpenGPU.org组织上面去,里面有很多高手对偶的这篇档案展开了讨论,无奈偶才疏学浅,不好发表什么,于是就默默的看着他们的言论学习强大.

现在整理一下他们的回帖,也是相当棒的资料和经验,让我受益匪浅.

原文地址:http://www.ispinel.com/2010/01/27/163

讨论内容:

qiaojie:我相信异构平台会是未来并行计算的主流,不过感觉Cell的Local Memory是个比较失败的设计,直接导致了编程困难从而导致最终被抛弃,如果把Local Memory变成cache的话编程就简单多了。

cyj:我对GPGPU只有一知半解的理解,但是根据我的分析来看,CUDA中正是因为有的Shared Memory才能或得几十倍于CPU的加速比……,不知道这是不是也算作失败的设计?

qiaojie:其实NV也知道ShareMemory只是过渡方案,所以在设计Fermi的时候做了改进,可以让ShareMemory配置成Cache。Larrabee的话就更是直接的支持统一内存空间了,从编程角度上来说,我是更青睐Larrabee的,不过可惜Larrabee难产了。

Read more

Tesla架构下的CUDA程序优化.

本文是电子科技大学的大樟树写滴.

原文:http://blog.csdn.net/darkstorm2111203/archive/2009/07/30/4395612.aspx

CUDA优化的最终 目的是:在最短的时间内,在允许的误差范围内完成给定的计算任务。在这里,“最短的时间”是指整个程序运行的时间,更侧重于计算的吞吐量,而不是单个数据 的延迟。在开始考虑使用GPU和CPU协同计算之前,应该先粗略的评估使用CUDA是否能达到预想的效果,包括以下几个方面:

精度:目前GPU的单精度性能要远远超过双精度性能,整数乘法、求模、求余等运算的指令吞吐量也较为有限。在科学计 算中,由于需要处理的数据量巨大,往往采用双精度或者四精度才能获得可靠的结果,目前的Tesla架构还不能很好的满足高精度计算的需要。如果你的计算需要很高的精度,或者需要进行很多轮的迭代,最 好考虑在关键的步骤中使用双精度,而在其他部分仍然使用单精度浮点以获得指令吞吐量和精度的平衡。而如果你对精度有更高的要求,那么现在的架构还不能太高 的加速比。不过,在2010年将会普及的下一代架构中,双精 度浮点和整数处理能力将有很大的提升,这种情况会有根本性的改变。

Read more

由IBM停止Cell研发而想到的异构计算.

这篇文章也是老早就写好的了,大概是去年的11月份就写好了.

声明:本文受Creative Commons 署名-非商业性使用-禁止演绎 2.5 中国大陆 License协议保护.

cnBeta看到了IBM公司宣布停止研发Cell处理器,想想过去,发现已经过去了四年了,从最早在ISSCC 2005上面发布这颗CPU,是多么的让人诧异和惊奇或者说惊喜.

Cell处理器最早是使用在SONYPlayStation 3视频游戏机上面,同时也有少部分视频转换卡(比如丽台WinFast PxVC1100)或者是其他领域(家电和其他).

关于Cell的历史:

最初是在2000年年中的时候,SONYTOSHIBAIBM开始研究下一代游戏机处理架构,在同年秋季达成了一致:SONY作为内容提供商,IBM主要进行CPU开发,TOSHIBA作为大批量生产与开发的技术伙伴。Cell处理器的设计的最初目标是达到Play Station2PS2)处理器性能的100倍。
在最开始的研究阶段,IBM的研究部门设计者讨论了各种各样的多核技术——从传统的芯片多处理器到数据流导向的多处理器,同时,IBM在工艺上面也在前沿工艺加以辅助,包括当时非常前卫的90nm工艺, SOI(Silicon On Insulator)LOWkDielectrics以及Copper Interconnects技术等。

2000 年底,设计者终于在架构上达成了一致:Cell将基于64Power架构,同时包含内存控制器和协处理器。

Read more

CUDA的Shared Memory用法.

说来已经半年多没做CUDA了,这半年都在弄OpenGL,CUDA的相关知识都忘记了大半,昨天晚上的时候拿着一本周伟明老师的多核编程的书看着,看累的时候就又翻了翻大樟树,锗学姐和开勇哥的GPU高性能计算之CUDA的书.

然后翻看到了Shared Memory这里,里面讲述到了Shared Memory的用法.

说实话我之前看CUDA Programming Guide的关于Shared Memory用法把我看的迷迷糊糊的,疑云一大堆.

看了CUDA的那本书之后终于明白了,下面简要说一下.

Shared Memory动态申请的话需要采用偏移式管理,比如这样:

__shared__ float sh_a[];
__shared__ float sh_b[];
__shared__ float sh_c[];
 Read more

一些关于CUDA的简单的思考.

粗浅的文章,还请大家多多指正.

声明:本文受Creative Commons 署名-非商业性使用-禁止演绎 2.5 中国大陆 License协议保护.

程式的优化问题.

在做CUDA开发的时候,感觉难点之一就是如何将GPU的性能发挥到最大。

比如说,在同学的GeForce 8400M GS上面跑的程式,Block数量可能要设置的比较少,也就是说一个thread粒度会比较大,这样才能发挥8400最大的性能,因为8400的SM数量 实在太少,但是相同的程式设置用到GeForce GTX285上面却不好用了,为什么呢?因为GT300有30个SM,Block数目设置的较多一点才会更适合,thread的粒度相对较小。
尽管基本不会影响到程式的正确性,但是程式的优化却是和GPU不同不一样的,因此,Fermi做出了将32SP才集合成一个SM,而不是像以前的8个SP 组成一个SM,可能也是为了缓解该问题。

对比一下其他并行计算模型.

不过我对其他并行模型并没有多少了解,还请诸位高手指正。

在CUDA并行计算模型上面,一个程式每个thread的粒度都比较小,而且thread的总数一般都是10万个以上,同时众多thread组合成多个 block分批执行,因此在一个block内thread的计算量和任务基本都是高度一致的(否则会引起很显著的性能问题),因此也不适合做分支预测很多 的任务。

Read more

return top