【问题标题】:Confusion on CUDA/openCL and C++ AMP对 CUDA/openCL 和 C++ AMP 的困惑
【发布时间】:2012-05-05 09:54:57
【问题描述】:

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

但我的问题是:AMP 是 Microsoft 的 CUDA 替代品吗?或者当 NVIDIA CUDA 显卡可用时,AMP 是否使用 CUDA 驱动程序? AMP 是 openCL 的替代品吗?

我还是很困惑..

【问题讨论】:

  • C++-AMP 编译器是直接生成 GPU 机器代码,还是生成 C 代码并将其传递给 CUDA 或 OpenCL 编译器是否重要?无论哪种方式,您都编写 C++-AMP 而不是 CUDA 或 OpenCL。
  • 此外,没有“CUDA 视频卡”之类的东西。 CUDA 不是在硬件中实现的,它被转换(编译)为 GPU 的本机指令集(即 Fermi)。
  • C++ AMP specification 没有提及 CUDA 或 OpenCL。
  • ArrayFire 是通过基于数组的 API 使用 GPU 的更好方法。比 AMP 更快、更通用、功能更多。
  • “我读到微软正在与 Nvidia 密切合作以提高 AMP 性能” - 他们应该更独立于平台而不是 “MSy” i> AMP 规范以进一步推动独立于平台的支持(但我猜,并且可以理解,这两者都没有兴趣),因为 C++ AMP 的基本概念i> 真是太棒了,只是它与 DX 的联系以及缺乏图像功能使其作为一般的 heal-all-solution 相当无用。

标签: c++ cuda opencl c++-amp


【解决方案1】:

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,作为另一种选择,同样的陈述也适用于此。您可以选择使用哪个。

【讨论】:

  • 谢谢,现在终于清楚了。我马上看看你的博客!
  • 刚刚在 Channel9 上观看您的“异构计算和 C++ AMP”演讲。非常有趣。
【解决方案2】:

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

由于 Microsoft 也有 CUDA(直接计算)的直接竞争对手,并且通常更喜欢它自己的专有图形标准,我们将不得不看看它到底会发生什么。

微软对此的看法见these lectures

【讨论】:

  • C++ AMP 主要是一个库。语言扩展很小——restrict 关键字重新调整用途和 tile_static 存储说明符。您认为的 C++ AMP - parallel_for_each、array_view 等都是库而不是语言。否则你的答案就成立。
  • @KateGregory - 是的,我没有详细介绍,但它似乎有一些额外的钩子(如 C++/CLR),所以我认为将其称为扩展更安全
  • 嗨,马丁,感谢您链接到我的截屏视频。 C++ AMP 与 CUDA 无关。我认为您可能会将营销术语 CUDA 与技术 CUDA 混淆,但即便如此,C++ AMP 开放规范与 CUDA 无关,而 C++ AMP Microsoft 实现与 CUDA 无关。 C++ AMP 也不是一组语言扩展,它主要是一个库。作为 C++ AMP 的一部分,引入了通用语言功能,该功能与 C++ AMP 无关,目前仅由 C++ AMP 使用。 C++ AMP 和 CLR 之间也绝对没有关系。
  • @DanielMoth - 谢谢我当时没有机会观看视频。我并不是说它是 CLR,就像 C++ 组件扩展或 C++/CLR 一样,所以“引入了通用语言功能”= 非标准 C++ 扩展。只是为了增加混乱,Herb Sutter 在公告中声称它是用于云和 GPU 的 C++!
  • @Michaelangelo [=] 既不是运算符也不是非标准的。搜索C++ 11 lambda,一切都会揭晓。您可以在 gregcons.com/cppamp 找到许多 C++ AMP 资源,以及从那里链接到的本地并行博客
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-11-28
  • 2016-07-27
  • 1970-01-01
  • 2018-01-09
  • 1970-01-01
  • 1970-01-01
  • 2021-12-15
相关资源
最近更新 更多