Windows 7 可能会在明年 10 月进入 RTM(以及 DirectX 11),是否值得等待 DirectX 11 的显式 GPGPU 功能,这意味着它将是跨平台的(ATI/Nvidia,而不是 Windows/Linux/Mac/Whatever) ; 还是我现在应该创建一个 CUDA 应用程序?
4 回答
根据我的经验,从通用处理器编程到 GPGPU 编程的主要飞跃是概念上的飞跃。这里的关键是数据并行代码。
即使在 CPU 上的多线程环境中,每个线程都在底层做自己的事情,线程之间的同步是比较少见的。要使用 GPGPU 的强大功能,您需要运行数千个线程,这些线程在逻辑上运行相同的指令,处理不同的数据,几乎完全同步。
与了解数据并行范式相比,学习 CUDA 语法相对较快,因此,如果您打算为 GPGPU 编程做好准备,现在开始使用 CUDA 将是一个非常值得的举措。
从学习的角度来看,我认为您将从现在开始使用 CUDA 中受益,因为它将帮助您思考 GPU 擅长的数据并行性。然后,当/如果您转向 DirectX 11,您就有了使用它的良好基础,但这取决于您可用的时间类型(即,您是否有时间尝试只是为了学习经验)。
或者,mac 人正在推动将 OpenCL(开放计算语言)作为通用解决方案,尽管目前知之甚少。这是您可以等待并检查的另一种技术。
Microsoft PDC 大会在本月晚些时候举行,也许他们会公布一些有关 DX11 的有用信息,以帮助您下定决心。
我的一般建议是,我认为现在有很多东西要学,以后可以使用(使用 DX11 或 OpenCL),但是你必须问问自己,你是否愿意学习一些可能无法使用的技术从长远来看。无论如何,这些只是我的想法,我还没有大量使用 CUDA 的经验。
在一个高度推测性的注释中,我的直觉是,像 CUDA 这样的 API 不会长期存在,而 DirectX 和/或 OpenCL 是唯一有前途的解决方案(除非他们真的搞砸了他们的实现,我对此表示怀疑)。
如果你想要学习体验,那就去吧!
另一种选择是 AMD/ATI 的流 SDK,您可以在此处下载:http: //ati.amd.com/technology/streamcomputing/sdkdwnld.html
nVidia 的 Cuda 和 ATI 的 CAL 在功能上大致相当。Cuda 仅适用于 nVidia gpus,CAL 仅适用于 ATI gpus。
最终,会有很好的跨平台开发工具,但现在这是一个巨大的空白。DirectX 11 计算着色器和 OpenCL 将争取成为首选工具,但目前还没有任何一个可用。
如果您想构建一些“真正的”应用程序,而不仅仅是一次性的学习体验,并且您希望它能够跨平台工作,那么有一些替代方案:例如 Brook。此外,多年来人们一直在使用 DirectX 和 OpenGL(不是 OpenCL)进行 gpgpu 工作,而无需等待明确的 GPGPU 功能。转到 gpgpu.org 获取指针
DirectX 11 Compute Shaders 和 OpenCL 都主要基于 CUDA,因此现在开始使用 CUDA 绝对值得。基本上,它们都使用相同的内存模型,并且具有相似的语法,它更接近 CUDA 而不是 Brook+(您将与 Stream SDK 一起使用)。
但是,如果您想要 DX11,则无需等待,只需从 Microsoft 获取2008 年 11 月的 SDK ,它带有 DX11 预览版,您已经可以使用它来编写(至少)简单的计算着色器应用程序。