GPU编程入门

187

每个人都拥有一台庞大的并行超级计算机,形式为显卡 GPU,放置于他们的桌面上。

  • GPU 社区中的 "hello world" 相当于是什么?
  • 我该去哪里,做些什么,才能开始为主要 GPU 供应商编程?

-Adam


1
你是在谈论GPGPU还是图形编码? - Menkboy
5
他在谈论CUDA(一种面向nVidia GPU的API)和其他技术。利用GPU中可用的FPU单元进行非图形编码。 - Wedge
1
作为参考,上一代GeForce 8800拥有128个流处理器,运行速度约为1.3 GHz,而旗舰级别的GTX 280则具备240个流处理器,这些GPU的理论性能分别为0.5和0.9 TeraFLOPS。 - Wedge
9个回答

78

推荐使用NVidia的CUDA平台进行GPU编程,这是最容易上手的平台之一,有大量优秀的学习资料可供阅读。


Hello world级别的实例可以通过GPU进行各种计算。


18
  1. 您可以获得可编程的顶点和像素着色器,允许直接在GPU上执行代码以操纵要绘制的缓冲区。这些语言(如OpenGL的GL Shader Lang和High Level Shader Lang以及DirectX的等效语言)采用C样式语法,并且非常易于使用。一些HLSL的示例可以在此找到,适用于XNA游戏工作室和DirectX。我没有任何像样的GLSL参考资料,但我肯定有很多周围。这些着色器语言使得在每个顶点或像素级别直接在显卡上操纵所绘制的内容成为可能,从而使实现诸如阴影、灯光和bloom之类的效果变得非常容易。
  2. 其次,使用openCL来为新的通用GPU代写代码。我不确定如何使用它,但我的理解是openCL使您能够开始访问图形卡和普通CPU上的处理器。尽管这不是主流技术,但看起来由苹果推动。
  3. CUDA似乎是一个热门话题。CUDA是nVidia访问GPU动力的方式。这里有一些介绍

9
我觉得其他人已经回答了你的第二个问题。至于第一个问题,CUDA的“Hello World”,我认为没有固定的标准,但个人建议使用并行加法器(即对N个整数求和的程序)。
如果查看NVIDIA SDK中的“reduction”示例,这个表面上简单的任务可以扩展到演示许多CUDA注意事项,如合并读取、内存银行冲突和循环展开等。
请参见此演示文稿以获取更多信息: http://www.gpgpu.org/sc2007/SC07_CUDA_5_Optimization_Harris.pdf

8

OpenCL 是一项旨在创建跨平台库的努力,能够编写适用于GPU的代码。它允许编写代码而无需知道它将在哪个GPU上运行,从而使得在不针对多种类型的GPU的情况下使用一些GPU的功率更加容易。我怀疑它的性能不如本地GPU代码(或者不如GPU制造商允许的本地代码),但是在某些应用程序中,这种权衡是值得的。

它仍处于相对早期的阶段(截至本答案为1.1),但已在行业中得到了一些关注-例如,它在OS X 10.5及以上版本中得到了本地支持。


7
请看一下ATI Stream Computing SDK,它是基于斯坦福大学开发的BrookGPU的技术。

未来所有GPU工作都将使用OpenCL进行标准化。这是一个由苹果赞助的倡议,将成为图形卡供应商中立的技术。


6

另一种不需要涉及CUDA或OpenCL的GPU编程简便方式是通过OpenACC来实现。

OpenACC类似于OpenMP,使用编译器指令(例如#pragma acc kernels)将工作发送到GPU。例如,如果您有一个大循环(只有较大的循环才会真正受益):

int i;
float a = 2.0;
float b[10000];
#pragma acc kernels
for (i = 0; i < 10000; ++i) b[i] = 1.0f;
#pragma acc kernels
for (i = 0; i < 10000; ++i) {
  b[i] = b[i] * a;
}

编辑:不幸的是,目前只有 PGI 编译器真正支持 OpenACC,适用于 NVIDIA GPU 卡。


6
CUDA是一个非常好的框架,它允许您使用C语言编写GPGPU内核。编译器将从您的代码生成GPU微码,并将在CPU上运行的所有内容发送到您的常规编译器。然而,CUDA仅适用于NVIDIA的8系列或更高版本显卡。您可以查看CUDA专区以了解其功能。在CUDA SDK中有一些很棒的演示,该SDK附带的文档是实际编写代码的良好起点。它将指导您编写矩阵乘法内核,这是一个很好的起点。请参考CUDA专区CUDA SDK

4

尝试使用GPU++libSh

LibSh链接提供了如何将编程语言与图形原语(以及显然的原语本身)绑定的良好描述,而GPU++则通过代码示例描述了其全部内容。


3
如果你正在使用MATLAB,那么使用GPU进行技术计算(矩阵计算和大量数学/数字运算)就变得非常简单。我发现它在游戏以外的GPU卡用途上很有用。请查看以下链接:http://www.mathworks.com/discovery/matlab-gpu.html

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接