图形处理器编程入门

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

  • 什么是“ hello world”相当于 GPU 社区?
  • 我要做什么,我要去哪里,开始为主要的 GPU 供应商编写 GPU 程序?

亚当

132284 次浏览

看看 NVidia 的 CUDA,IMO 是做 GPU 编程最简单的平台。有很多很酷的材料可以阅读。 Http://www.nvidia.com/object/cuda_home.html

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

希望能帮上忙。

  1. 你得到可编程顶点和 允许执行的像素着色器 代码直接在 GPU 上 操作缓冲区 这些语言(即。 OpenGL 的 GL 着色器朗和高 水平着色器朗和 DirectX 的等价物 ) ,是 C 风格的语法,而且实际上 一些 HLSL 的例子 可以找到 XNA 游戏的 给你 工作室和 X 导演,我没有 任何像样的 GLSL 参考资料,但我 周围肯定有很多,这些 着色器语言给出了巨大的 功率的大小 操纵每个顶点上画的东西 或每像素水平,直接 在显卡上,制造东西 像影子,光线,和花朵 很容易实现。
  2. 我想到的第二件事就是 OpenCL 为新的 通用图形处理器的线路。我是 不知道如何使用这个,但我的 理解是 openCL 给出了 你开始能够 访问处理器 显卡和普通 CPU。这还不是主流技术,似乎是由苹果公司推动的。
  3. CUDA 似乎是一个热门话题。 CUDA 是 nVidia 访问 GPU 电源的方式。 给你是一些介绍

试试 GPU + + LibSh

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

看看 流计算软件开发工具包,它是基于斯坦福大学开发的 BrookGPU

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

CUDA 是一个很好的开始框架。它允许你用 C 语言编写 GPGPU 内核。编译器将从你的代码中产生 GPU 微代码,并将在 CPU 上运行的所有代码发送给常规编译器。它是 NVIDIA 只不过,只有在8系列卡或更好的工程。您可以查看 CUDA 区域,看看它能做些什么。在 CUDA SDK中有一些很棒的演示。SDK 附带的文档是实际编写代码的一个很好的起点。它将指导你完成一个矩阵乘法内核的编写,这是一个很好的开始。

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

如果你在 NVIDIA SDK 中看到“减少”的例子,表面上简单的任务可以被扩展来演示许多 CUDA 考虑,例如合并读取、内存库冲突和循环展开。

更多信息请参见下面的演示文稿:

Http://www.gpgpu.org/sc2007/sc07_cuda_5_optimization_harris.pdf

OpenCL 是一个跨平台库,它能够编写适合 GPU 的代码。它允许一个人编写代码而不知道它将运行在什么 GPU 上,从而使它更容易使用一些 GPU 的能力而不需要针对几种类型的 GPU。我怀疑它的性能不如本地 GPU 代码(或者 GPU 制造商允许的本地代码) ,但是对于某些应用程序来说,这种折衷是值得的。

它仍然处于相对较早的阶段(截止到本文答案为1.1) ,但已经在业界获得了一些吸引力——例如,它在 OS X 10.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;
}

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

如果使用 MATLAB,那么使用 GPU 进行技术计算(矩阵计算和繁重的数学/数字处理)就会变得非常简单。我发现它对游戏之外使用 GPU 卡很有用。你可浏览以下连结:

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