我现在应该创建CUDA应用程序,还是等待DirectX 11?

3

随着Windows 7可能在明年10月发布(并伴随着DirectX 11的发布),等待DirectX 11的显式GPGPU特性是否值得,这意味着它将是跨平台的(ATI / Nvidia,而不是Windows / Linux / Mac /其他); 或者我现在就创建一个CUDA应用程序?

4个回答

3

根据我的经验,从通用处理器编程跃迁到GPGPU编程的主要难点在于概念上的飞跃。关键在于数据并行代码。

即使在CPU的多线程环境中,每个线程都在低级别上做着自己的事情,线程之间的同步是相对较少的。为了利用GPGPU的强大能力,您需要运行数千个线程,这些线程在逻辑上运行着相同的指令,但在不同的数据上,几乎完全同步。

相比于理解数据并行范例,学习CUDA语法相对较快,因此,如果您打算为GPGPU编程装备自己,现在开始使用CUDA会是非常值得的一步。


我对数据并行编程很熟悉,但是我在思考如果DX11也将包括GPGPU功能,那么是否值得投资时间学习CUDA。 - TraumaPony

2
从学习的角度来看,我认为你现在开始学习CUDA会很有益处,因为它会帮助你更好地思考数据并行化,这正是GPU擅长的。然后,如果你转向DirectX 11,你就有了一个良好的基础来使用它,但这取决于你可用的时间(即如果你有时间尝试一些学习经验)。
另外,苹果公司正在推动OpenCL(开放计算语言)成为通用解决方案,但目前还不太清楚。这是另一种技术,你可以等待并检查它。
微软PDC会议将于本月晚些时候举行,也许他们会宣布一些有用的DX11信息,帮助你做出决定。
我的一般建议是,我认为现在有很多东西需要学习,以后你会用得上(使用DX11或OpenCL),但你必须问问自己是否愿意学习一些可能在长期内没有前途的技术。无论如何,这些只是我的想法,我对CUDA的经验不是很丰富。
高度猜测的是,我的直觉是像CUDA这样的API不会长久存活,而DirectX和/或OpenCL是唯一有未来的解决方案(除非他们真的搞砸了实现,但我不相信)。

1

如果你想要学习经验,就去尝试吧!

另一个选择是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获取指针。


1

DirectX 11计算着色器和OpenCL主要基于CUDA,因此现在开始使用CUDA绝对是值得的。基本上,它们都使用相同的内存模型,并且具有类似的语法,更接近于CUDA而不是Brook+(您将使用Stream SDK与之配合)。

然而,如果您想要DX11,就没有必要等待,只需从Microsoft获取2008年11月SDK,该SDK带有DX11预览版,您可以使用它来编写(至少)简单的计算着色器应用程序。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接