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

Posted

技术标签:

【中文标题】我应该现在创建 CUDA 应用程序,还是等待 DirectX 11? [关闭]【英文标题】:Should I create CUDA apps now, or wait for DirectX 11? [closed] 【发布时间】:2010-09-18 12:13:09 【问题描述】:

Windows 7 可能会在明年 10 月推出 RTM(以及 DirectX 11),是否值得等待 DirectX 11 明确的 GPGPU 功能,这意味着它将是跨平台的(ATI/Nvidia,而不是 Windows/Linux/Mac /任何);还是我现在应该创建一个 CUDA 应用程序?

【问题讨论】:

【参考方案1】:

从学习的角度来看,我认为现在开始使用 CUDA 会让您受益匪浅,因为它会极大地帮助您思考 GPU 擅长的数据并行性。然后,当/如果您转向 DirectX 11,您就有了使用它的良好基础,但这取决于您有多少时间(即,您是否有时间尝试只是为了学习经验)。

另外,Mac 用户正在推动将 OpenCL(开放计算语言)作为通用解决方案,尽管目前知之甚少。这是另一项您可以等待并检查的技术。

Microsoft PDC 大会将于本月晚些时候举行,或许他们会公布一些有关 DX11 的有用信息,以帮助您下​​定决心。

我的一般建议是,我认为现在有很多东西需要学习,以后可以使用(使用 DX11 或 OpenCL),但你必须问问自己是否愿意学习一些可能不会从长远来看。无论如何,这些只是我的想法,我还没有大量使用 CUDA 的经验。

在一个高度推测性的注释中,我的直觉是 CUDA 等 API 不会长期存在,而 DirectX 和/或 OpenCL 是唯一有前途的解决方案(除非他们真的搞砸了他们的实现,我对此表示怀疑)。

【讨论】:

【参考方案2】:

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

即使在 CPU 上的多线程环境中,每个线程都在底层做自己的事情,线程之间的同步是相对罕见的。要使用 GPGPU 的强大功能,您需要运行数千个线程,这些线程在逻辑上运行相同的指令,处理不同的数据,几乎完全同步。

与了解数据并行范式相比,学习 CUDA 语法相对较快,因此,如果您打算为 GPGPU 编程做好准备,现在开始使用 CUDA 将是一个非常值得的举措。

【讨论】:

我非常了解数据并行编程,我只是想知道如果 DX11 还包含 GPGPU 功能,是否值得在 CUDA 上投入时间。【参考方案3】:

如果你想要学习体验,那就去吧!

另一种选择是 AMD/ATI 的流 SDK,您可以在这里下载:http://ati.amd.com/technology/streamcomputing/sdkdwnld.html

nVidia 的 Cuda 和 ATI 的 CAL 在功能上大致相当。 Cuda 仅适用于 nVidia gpus,CAL 仅适用于 ATI gpus。

最终,会有很好的跨平台开发工具,但现在这是一个巨大的空白。 DirectX 11 计算着色器和 OpenCL 将努力争取成为首选工具,但目前还没有一个可用。

如果您想构建一些“真正的”应用程序,而不仅仅是一次性的学习体验,并且您希望它能够跨平台工作,有一些替代方案:例如 ***。此外,多年来人们一直在使用 DirectX 和 OpenGL(不是 OpenCL)进行 gpgpu 工作,而无需等待明确的 GPGPU 功能。前往 gpgpu.org 获取指针

【讨论】:

【参考方案4】:

DirectX 11 Compute Shader 和 OpenCL 都主要基于 CUDA,因此现在绝对值得开始使用 CUDA。基本上,它们都使用相同的内存模型,并且具有相似的语法,这更接近于 CUDA 而不是 ***+(您将与 Stream SDK 一起使用)。

但是,如果您想要 DX11,则无需等待,只需从 Microsoft 获取带有 DX11 预览的November 2008 SDK,您已经可以使用它来编写(至少)简单的计算着色器应用程序。

【讨论】:

以上是关于我应该现在创建 CUDA 应用程序,还是等待 DirectX 11? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

如何从驱动程序 API 使用运行时 API 创建的上下文

CUDA 一维数组未更新

网吧安装cuda

如果我使用 BLAS/cuBLAS 使其性能优于普通 C/CUDA,矩阵应该有多大?

CUDA 内核的奇怪行为

如何在我的代码中使用张量核心而不是 cuda 核心?