GPU编程简介[关闭]

Posted

技术标签:

【中文标题】GPU编程简介[关闭]【英文标题】:Intro to GPU programming [closed] 【发布时间】:2010-09-18 05:00:41 【问题描述】:

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

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

-亚当

【问题讨论】:

你说的是GPGPU,还是图形编码? 他在谈论 CUDA(nVidia GPU 的 API)和其他技术。使用 GPU 中可用的 FPU 单元进行非图形编码。 作为参考,上一代 GeForce 8800 有 128 个流处理器,工作频率约为 1.3 GHz,*** GTX 280 有 240 个流处理器,这些 GPU 的理论性能为 0.5 和 0.9 TeraFLOPS,分别。 【参考方案1】:
    您可以获得可编程顶点和 允许执行的像素着色器 直接在 GPU 上的代码 操纵缓冲区 被画下来。这些语言(即 OpenGL的GL Shader Lang和High Level Shader Lang 和 DirectX 的等价物 ),是 C 风格的语法,而且真的 使用方便。 HLSL 的一些示例 XNA游戏可以找到here 工作室和 Direct X。我没有 任何体面的 GLSL 参考资料,但我是 肯定有很多。这些 着色器语言提供了巨大的 电量 操纵在每个顶点绘制的内容 或逐像素级别,直接 在显卡上,做东西 像阴影,照明和绽放 真的很容易实现。 想到的第二件事是使用 openCL 为新代码 通用GPU的线。我是 不知道如何使用这个,但我的 理解是openCL给出了 你开始能够 在两个访问处理器 显卡和普通cpu。这还不是主流技术,似乎是由 Apple 推动的。 CUDA 似乎是一个热门话题。 CUDA 是 nVidia 访问 GPU 功能的方式。 Here 是一些介绍

【讨论】:

【参考方案2】:

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

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

【讨论】:

【参考方案3】:

另一种无需进入 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。

【讨论】:

【参考方案4】:

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

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

【讨论】:

【参考方案5】:

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

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

希望对您有所帮助。

【讨论】:

【参考方案6】:

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

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

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

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

【讨论】:

【参考方案7】:

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

【讨论】:

【参考方案8】:

看看ATI Stream Computing SDK。它基于斯坦福大学开发的***GPU。

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

【讨论】:

【参考方案9】:

试试GPU++ 和libSh

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

【讨论】:

以上是关于GPU编程简介[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

如何编写可在任何 GPU 上运行的 GPU 并行化程序? [关闭]

如何在 GPU 上启用 php 运行 python 脚本? [关闭]

我的 GPU 中有多少个内核? [关闭]

GPU作为CPU的可行性? [关闭]

用于计算的 Nvidia 消费级 GPU [关闭]

GPU图像过滤器[关闭]