OpenCL和DirectCompute有什么区别?

20
我正在寻找OpenCLDirectCompute之间的比较,但是我没有找到任何信息。对我来说,OpenCL跨平台和支持更广泛的GPU的优势并不重要。我可以在Windows上针对DX11 GPU进行编程。在这种情况下,每个API的优缺点是什么?
我知道这个问题以前提过, 但我想要更多的细节。
我不感兴趣CUDA,因为我不想限制自己只使用Nvidia硬件。

你可能需要重新考虑你对CUDA的立场,它非常强大,nvidia硬件也是如此。 - Benson
7
假设所有用户都有英伟达硬件似乎是一个相当大的失败。最好实际采用标准化的API,比如OpenCL或DirectCompute。它们都具有CUDA的同样优点,而且不会像CUDA那样只能在英伟达硬件上运行。事实上,现在必须质疑在有其他API可以在任意数量的不同硬件系统上做到完全相同的事情时,使用CUDA的决定是否明智。 - Cromulent
@Simon 他们真的这样吗?我承认我已经有几个月没有进行比较了,但是据我所知,CUDA更加完整和功能丰富。当您使用DirectCompute时,您会做出其他假设。同时,并不是每个人都有通用的“用户”。许多科学计算项目购买硬件并构建软件以在其上运行。由于我们没有从Bob那里得到任何细节,因此您不能做出任何假设。 - Benson
2
@Benson 我们可以假设他对CUDA不感兴趣,因为他说过他不感兴趣。具体来说,是因为他不想将自己限制在Nvidia硬件上。至于CUDA更丰富的功能,你需要更具体一些。我不知道有什么主要优势能说服我使用它比使用适用于所有GPU的解决方案更可取(在OpenCL的情况下,还可以使用其他硬件设备,如CPU、DSP和任何兼容OpenCL的设备 - CUDA允许吗?)。 - Cromulent
@Benson:CUDA支持附加缓冲区和消费缓冲区吗? - elmattic
显示剩余2条评论
5个回答

15

对于一个程序员来说,最大的区别可能是DirectCompute使用类似于HLSL的语言进行编程,而OpenCL则通过类似于C的语言进行编程。

另一个需要考虑的区别是通常情况下,在普通级别的GPU上,Windows系统对DirectX的支持比OpenGL更好(更快,更少出错)。这可能意味着对DirectCompute更稳定的支持,但实际上这只是猜测。


OpenGL在Windows上的支持与OpenCL有什么关系呢?重要的是供应商之间的支持差异;AMD非常好地支持OpenCL,并支持更新版本,而NVIDIA(拥有竞争的CUDA产品)仅支持CL 1.1(带有图像扩展等)。此外,OpenCL保证了某些DirectCompute(以及来自OpenGL的Compute Shaders)不具备的东西,例如IEEE浮点合规性。 - Jonathan Ringstad
1
当我写这篇文章时,我认为现在仍然如此,低级别的视频卡驱动程序对于每种技术都是相同的。请仔细阅读我所说的:“这可能会转化为更稳定的支持……” 这是有推测性的,但并非毫无根据,因为将内存和函数转移至和从视频卡中的协议对于任何一种技术栈都是相同的,并且对于DirectCompute来说具有与更受支持的DirectX享有的相同数量的测试和健壮性。再次声明,这是我写这篇文章时的情况。 - codekaizen

13

OpenCL的主要优势在于它不仅局限于图形卡。您可以利用多核CPU、图形卡和潜在的任何数量的其他硬件加速设备(例如DSP),所有这些都可以从同一个程序中使用。

我不确定DirectCompute是否允许这种自由。


1
DirectCompute不能在CPU资源上运行,但是来自MSR的Accelerator v2可以在CPU上运行,并且抽象了计算资源的使用。http://research.microsoft.com/en-us/projects/accelerator/ - codekaizen

5
OpenCL的跨平台性不仅仅是一个细节,因为主机代码(调用OpenCL API并提交内核的代码)本身也可以跨平台(参见链接文本, 链接文本...)。
一次编写,任何地方都可以运行在任何GPGPU上。
否则,OpenCL工具正在变得越来越好,有适用于Visual Studio的ATI Stream插件,包含大量示例的NVidia和ATI SDK等。

3

1
我曾经认为只有Visual Studio 2012才能编译C++ AMP代码 - 那不算是“需要单独的编译器”吗? - JBentley

1

我使用OpenCL,因为我可以轻松地将我的应用程序移植到Linux,但使用DirectCompute则不可能。 我认为随着时间的推移,OpenCL实现的性能将会提高(达到与NVidia卡的CUDA相同的水平),而且(驱动程序)错误也将会被消除(希望如此;))。


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