随着Windows 7可能在明年10月发布(并伴随着DirectX 11的发布),等待DirectX 11的显式GPGPU特性是否值得,这意味着它将是跨平台的(ATI / Nvidia,而不是Windows / Linux / Mac /其他); 或者我现在就创建一个CUDA应用程序?
随着Windows 7可能在明年10月发布(并伴随着DirectX 11的发布),等待DirectX 11的显式GPGPU特性是否值得,这意味着它将是跨平台的(ATI / Nvidia,而不是Windows / Linux / Mac /其他); 或者我现在就创建一个CUDA应用程序?
根据我的经验,从通用处理器编程跃迁到GPGPU编程的主要难点在于概念上的飞跃。关键在于数据并行代码。
即使在CPU的多线程环境中,每个线程都在低级别上做着自己的事情,线程之间的同步是相对较少的。为了利用GPGPU的强大能力,您需要运行数千个线程,这些线程在逻辑上运行着相同的指令,但在不同的数据上,几乎完全同步。
相比于理解数据并行范例,学习CUDA语法相对较快,因此,如果您打算为GPGPU编程装备自己,现在开始使用CUDA会是非常值得的一步。
如果你想要学习经验,就去尝试吧!
另一个选择是AMD/ATI的Stream SDK,你可以在这里下载:http://ati.amd.com/technology/streamcomputing/sdkdwnld.html
nVidia的Cuda和ATI的CAL在功能上大致相当。Cuda只适用于nVidia的GPU,而CAL只适用于ATI的GPU。
最终,会有很好的跨平台开发工具,但现在这是一个巨大的空白。DirectX 11计算着色器和OpenCL将争夺成为首选工具,但目前还没有可用的。
如果你想要构建一些“真正”的应用程序,而不仅仅是一次性的学习体验,并且希望它能够跨平台运行,那么有一些替代方案:例如Brook。此外,人们已经使用DirectX和OpenGL(而不是OpenCL)进行了几年的GPGPU工作,而不必等待显式的GPGPU功能。请访问gpgpu.org获取指针。
DirectX 11计算着色器和OpenCL主要基于CUDA,因此现在开始使用CUDA绝对是值得的。基本上,它们都使用相同的内存模型,并且具有类似的语法,更接近于CUDA而不是Brook+(您将使用Stream SDK与之配合)。
然而,如果您想要DX11,就没有必要等待,只需从Microsoft获取2008年11月SDK,该SDK带有DX11预览版,您可以使用它来编写(至少)简单的计算着色器应用程序。