混淆CUDA/openCL和C++ AMP

15

我看到微软正在与Nvidia密切合作,以提高AMP性能。

但我的问题是:AMP是否是微软替代CUDA的解决方案?或者在有NVIDIA CUDA显卡可用时,AMP是否使用CUDA驱动程序?AMP是否是OpenCL的替代方案?

我仍然感到相当困惑...


1
C++-AMP 编译器直接生成 GPU 机器代码还是生成 C 代码并将其传递给 CUDA 或 OpenCL 编译器,这有关系吗?不管怎样,你都可以使用 C++-AMP 来代替 CUDA 或 OpenCL。 - Ben Voigt
1
此外,“CUDA视频卡”这种说法并不存在。CUDA并非硬件实现,而是会被转换(编译)为GPU的本机指令集(例如Fermi)。 - Ben Voigt
1
C++ AMP规范没有提到CUDA或OpenCL。 - ildjarn
ArrayFire是一种通过基于数组的API更好地使用GPU的方式。比AMP更快,更多功能,更加灵活。 - arrayfire
我看到微软正在与Nvidia密切合作,以提高AMP的性能。他们应该更多地致力于开发一个更平台无关和不那么“MSy”的AMP规范,以进一步推动平台无关的支持(但我猜想,两者都对此不感兴趣),因为C++ AMP的基本概念非常棒,只是它与DX的绑定和缺乏图像功能使其作为通用的“万能药”变得相当无用。 - Christian Rau
2个回答

23

C++ AMP是一个库(同时也引入了一个重要的语言扩展)。由于C++ AMP是一个开放的规范,它可以在任何其他低级语言上实现。Microsoft的实现基于DirectCompute(因此也基于HLSL),但当您使用C++ AMP时,这完全对您隐藏(这就是为什么C++ AMP可以成为一个开放的规范;它没有在API表面中暴露DirectX)。有关C++ AMP的更多信息,请查看我们博客右侧的资源(我们将不断添加): http://blogs.msdn.com/b/nativeconcurrency/

您提到了Microsoft与NVIDIA合作以提高C++ AMP性能的说法 - 这是不正确的。Microsoft与NVIDA、AMD和其他合作伙伴一起创建了C++ AMP开放规范。Microsoft还与硬件供应商合作,确保硬件供应商具有稳定的视频卡驱动程序,这是任何GPU计算技术正常工作所必需的。

您还表达了困惑并提出了一些术语。OpenCL是一种GPU计算方法(由Khronos提出),同样的,DirectCompute是由Microsoft提出的,CUDA则是由NVIDIA提出的。这些都是独立的技术,每种技术都有自己通往GPU的路径(始终通过某种驱动程序),每种技术都有其优点、强项和缺点。它们不是相互替代的,也没有一种技术普遍更好。现在您还可以将C++ AMP加入到这个选择列表中,作为另一种选择,同样的陈述也适用于它。选择权在您手中,您可以自行决定使用哪种。


1
谢谢,现在我终于清楚了。我会立即查看你的博客! - Marco A.
刚在Channel9上看了你的“异构计算和C++ AMP”演讲。非常有趣。 - Contango

3

C++ AMP是一组语言扩展和API,支持并行编程技术,包括CUDA。

由于微软也有一个直接与CUDA竞争的产品(Direct Compute),并且通常更喜欢自己的专有图形标准,所以我们必须看看它能否真正发挥作用。

对于微软的看法,请参见这些讲座


5
C++ AMP主要是一个库。语言扩展很小,只有"restrict"关键字的重新定义和"tile_static"存储说明符。你所认为的C++ AMP,例如parallel_for_each、array_view等都是库,而不是语言本身。除此之外,你的回答是正确的。 - Kate Gregory
1
@KateGregory - 是的,我没有详细讨论过,但它似乎有一些额外的钩子(像C++/CLR),所以我认为将其称为扩展更安全。 - Martin Beckett
3
嗨,马丁,感谢链接我的屏幕录像。C++ AMP与CUDA没有关系。我认为您可能会将营销术语CUDA与技术CUDA混淆,但即使如此,C++ AMP开放规范也与CUDA无关,而C++ AMP Microsoft实现也与CUDA无关。此外,C++ AMP不是一组语言扩展,它主要是一个库。作为C++ AMP的一部分,引入了一种通用的语言功能,它不是与C++ AMP绑定的,而是目前仅由C++ AMP使用。此外,C++ AMP与CLR之间绝对没有关系。 - Daniel Moth
2
@DanielMoth - 谢谢,我还没有机会观看这些视频。我的意思不是CLR,只是像C++组件扩展或C++/CLR一样,引入了“通用语言特性”=非标准C++扩展。为了增加混淆,Herb Sutter在宣布中声称它是云和GPU的C++! - Martin Beckett
4
@Michaelangelo [=]既不是运算符也不是非标准的。搜索“C++11 Lambda”,一切将水落石出。您可以在gregcons.com/cppamp上找到许多C++ AMP资源,以及从那里链接到的本机并行博客。 - Kate Gregory
显示剩余3条评论

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