每个人的桌面上都有这台巨大的大规模并行化超级计算机,以显卡 GPU 的形式存在。
- 什么是 GPU 社区的“hello world”等价物?
- 我该做什么,我该去哪里,开始为主要的 GPU 供应商编写 GPU?
-亚当
每个人的桌面上都有这台巨大的大规模并行化超级计算机,以显卡 GPU 的形式存在。
-亚当
查看 NVidia 的 CUDA,IMO 它是最简单的 GPU 编程平台。有大量很酷的材料可供阅读。
http://www.nvidia.com/object/cuda_home.html
Hello world 将使用 GPU 进行任何类型的计算。
希望有帮助。
我想其他人已经回答了你的第二个问题。至于第一个,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 及更高版本上得到原生支持。
看看ATI 流计算 SDK。它基于斯坦福大学开发的BrookGPU。
将来,所有 GPU 工作都将使用OpenCL进行标准化。这是一项由 Apple 赞助的计划,将与显卡供应商保持中立。
无需进入 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。
如果您使用 MATLAB,则使用 GPU 进行技术计算(矩阵计算和繁重的数学/数字运算)变得非常简单。我发现它对于在游戏之外使用 GPU 卡很有用。查看以下链接: