GPU编程简介[关闭]


176

每个人都以图形卡GPU的形式在台式机上拥有这台大型的大规模并行超级计算机。

  • 什么是GPU社区的“ hello world”?
  • 我该怎么做,该去哪里,才能开始为主要的GPU供应商编程GPU?

-亚当


1
您是在谈论GPGPU还是图形编码?
Menkboy

5
他正在谈论CUDA(nVidia GPU的API)和其他技术。使用GPU中可用的FPU单元进行非图形编码。
楔子

1
作为参考,最新一代的GeForce 8800具有128个流处理器,工作频率约为1.3 GHz,顶级的GTX 280具有240个流处理器,这些GPU的理论性能分别为0.5和0.9 TeraFLOPS。
楔子

Answers:



17
  1. 您将获得可编程的顶点和像素着色器,这些着色器允许直接在GPU上执行代码来操纵要绘制的缓冲区。这些语言(即OpenGL的GL Shader Lang和High Level Shader Lang和DirectX的等效语言)是C样式的语法,并且确实易于使用。可以 XNA游戏工作室和Direct X 上找到HLSL的一些示例。我没有任何不错的GLSL参考,但是我敢肯定有很多。这些着色器语言提供了巨大的功能,可以直接在图形卡上操纵在每个顶点或每个像素级别绘制的内容,从而使阴影,照明和光晕之类的东西真正易于实现。
  2. 我想到的第二件事是使用 openCL为通用GPU的新线进行编码。我不确定如何使用它,但是我的理解是openCL使您能够开始访问图形卡和常规cpu上的处理器。这还不是主流技术,似乎是由Apple驱动的。
  3. CUDA似乎是一个热门话题。CUDA是nVidia获取GPU功能的方式。是一些介绍

9

我认为其他人已经回答了您的第二个问题。对于第一个CUDA的“ Hello World”,我认为没有固定的标准,但就个人而言,我建议使用并行加法器(即,一个将N个整数相加的程序)。

如果您看一下NVIDIA SDK中的“减少”示例,那么可以扩展表面上简单的任务以演示众多CUDA注意事项,例如合并读取,内存库冲突和循环展开。

有关更多信息,请参见此演示文稿:

http://www.gpgpu.org/sc2007/SC07_CUDA_5_Optimization_Harris.pdf



7

OpenCL致力于使跨平台库能够编写适用于GPU的代码。它允许人们编写代码而无需知道它将在哪个GPU上运行,从而可以更轻松地使用某些GPU的功能,而无需专门针对几种GPU。我怀疑它的性能不如本机GPU代码(或不如GPU制造商所允许的本机代码),但是对于某些应用程序来说,这种折衷是值得的。

它仍处于相对较早的阶段(截至此答案为1.1),但在业界已获得一定的关注-例如,OS X 10.5及更高版本本身就支持它。


6

CUDA是一个很好的框架。它使您可以用C语言编写GPGPU内核。编译器将从代码中生成GPU微代码,并将CPU上运行的所有内容发送给常规编译器。它仅是NVIDIA,并且仅在8系列或更高版本的显卡上运行。您可以签出CUDA区域,以了解可以做什么。CUDA SDK中有一些很棒的演示。SDK随附的文档是实际编写代码的一个很好的起点。它将引导您编写矩阵乘法内核,这是一个很好的起点。


5

无需进入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;
}

编辑:不幸的是,对于NVIDIA GPU卡,只有PGI编译器现在才真正支持OpenACC。


3

尝试GPU ++libSh

LibSh链接很好地描述了它们如何将编程语言绑定到图形基元(显然是基元本身),GPU ++通过代码示例描述了其全部内容。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.