182

每个人的桌面上都有这台巨大的大规模并行化超级计算机,以显卡 GPU 的形式存在。

  • 什么是 GPU 社区的“hello world”等价物?
  • 我该做什么,我该去哪里,开始为主要的 GPU 供应商编写 GPU?

-亚当

4

9 回答 9

73

查看 NVidia 的 CUDA,IMO 它是最简单的 GPU 编程平台。有大量很酷的材料可供阅读。 http://www.nvidia.com/object/cuda_home.html

Hello world 将使用 GPU 进行任何类型的计算。

希望有帮助。

于 2008-10-20T21:15:20.057 回答
18
  1. 您将获得可编程的顶点和像素着色器,允许直接在 GPU 上执行代码来操作要绘制的缓冲区。这些语言(即 OpenGL 的 GL Shader Lang 和 High Level Shader Lang 以及 DirectX 的等价物)是 C 风格的语法,并且非常易于使用。可以在此处为 XNA 游戏工作室和 Direct X 找到一些 HLSL 示例。我没有任何像样的 GLSL 参考资料,但我敢肯定有很多。这些着色器语言提供了强大的功能,可以直接在图形卡上以每个顶点或每个像素级别操作绘制的内容,从而使阴影、照明和绽放之类的东西非常容易实现。
  2. 想到的第二件事是使用 openCL为通用 GPU 的新系列编写代码。我不确定如何使用它,但我的理解是 openCL 让您开始能够访问显卡和普通 cpu 上的处理器。这还不是主流技术,似乎是由苹果推动的。
  3. CUDA似乎是一个热门话题。CUDA 是 nVidia 访问 GPU 功能的方式。这里有一些介绍
于 2008-10-20T21:23:03.287 回答
9

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

如果您查看 NVIDIA SDK 中的“缩减”示例,可以扩展表面上简单的任务以演示许多 CUDA 考虑因素,例如合并读取、内存库冲突和循环展开。

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

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

于 2008-10-23T08:51:21.150 回答
8

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

它仍处于相对早期的阶段(截至本答案为 1.1),但已在行业中获得了一些吸引力 - 例如,它在 OS X 10.5 及更高版本上得到原生支持。

于 2011-06-25T16:31:48.997 回答
7

看看ATI 流计算 SDK。它基于斯坦福大学开发的BrookGPU

将来,所有 GPU 工作都将使用OpenCL进行标准化。这是一项由 Apple 赞助的计划,将与显卡供应商保持中立。

于 2008-10-20T21:30:43.490 回答
6

CUDA 是一个很好的入门框架。它允许您用 C 编写 GPGPU 内核。编译器将从您的代码生成 GPU 微代码,并将在 CPU 上运行的所有内容发送到您的常规编译器。它只是 NVIDIA 的,并且仅适用于 8 系列或更好的显卡。您可以查看CUDA 区域,看看可以用它做什么。CUDA SDK中有一些很棒的演示。SDK 附带的文档是实际编写代码的一个很好的起点。它将引导您编写矩阵乘法内核,这是一个很好的起点。

于 2008-10-20T21:35:31.063 回答
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。

于 2012-10-19T19:16:37.580 回答
4

试试GPU++libSh

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

于 2008-10-20T21:23:43.503 回答
3

如果您使用 MATLAB,则使用 GPU 进行技术计算(矩阵计算和繁重的数学/数字运算)变得非常简单。我发现它对于在游戏之外使用 GPU 卡很有用。查看以下链接:

http://www.mathworks.com/discovery/matlab-gpu.html

于 2014-07-07T16:40:08.433 回答