每个人都在桌面上以图形卡GPU的形式拥有这个巨大的大规模并行化超级计算机.
什么是GPU社区的"hello world"?
我该怎么做,我该去哪里,开始为主要的GPU供应商编程GPU?
-亚当
通过NVidia查看CUDA,IMO是最简单的GPU编程平台.有很多很酷的材料可供阅读.
http://www.nvidia.com/object/cuda_home.html
Hello世界将使用GPU进行任何类型的计算.
希望有所帮助.
您可以获得可编程的顶点和像素着色器,允许直接在GPU上执行代码来操作要绘制的缓冲区.这些语言(即OpenGL的GL Shader Lang和High Level Shader Lang和DirectX的等价物)是C风格的语法,并且非常易于使用.在这里可以找到HLSL的一些例子用于XNA游戏工作室和Direct X.我没有任何像样的GLSL参考,但我确信有很多.这些着色器语言提供了巨大的功能来操纵直接在显卡上以每个顶点或每个像素级别绘制的内容,使得阴影,光照和绽放等内容非常容易实现.
我想到的第二件事是使用 openCL来编写通用GPU的新行代码.我不知道如何使用它,但我的理解是openCL为您提供了能够访问显卡和普通CPU上的处理器的开端.这还不是主流技术,似乎是由Apple推动的.
CUDA似乎是一个热门话题.CUDA是nVidia访问GPU电源的方式.这是一些介绍
我认为其他人已经回答了你的第二个问题.至于第一个,CUDA的"Hello World",我认为没有一套标准,但就个人而言,我推荐一个并行加法器(即一个总和N个整数的程序).
如果你看一下NVIDIA SDK中的"简化"示例,可以扩展表面上简单的任务来演示许多CUDA注意事项,例如合并读取,内存库冲突和循环展开.
有关详情,请参阅此演示文稿:
http://www.gpgpu.org/sc2007/SC07_CUDA_5_Optimization_Harris.pdf
看看ATI Stream Computing SDK.它基于斯坦福大学开发的BrookGPU.
将来,所有GPU工作都将使用OpenCL进行标准化.这是Apple赞助的一项计划,它将成为显卡供应商的中立者.
CUDA是一个很好的框架.它允许您在C中编写GPGPU内核.编译器将从您的代码生成GPU微码,并将在CPU上运行的所有内容发送到常规编译器.它仅适用于NVIDIA,仅适用于8系列或更好的卡.您可以查看CUDA区域以了解可以使用它做什么.CUDA SDK中有一些很棒的演示.SDK附带的文档是实际编写代码的一个很好的起点.它将指导您编写矩阵乘法内核,这是一个很好的起点.
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; }
编辑:不幸的是,对于NVIDIA GPU卡,只有PGI编译器现在才真正支持OpenACC。