【问题标题】:What is the current status of C++ AMPC++ AMP的现状是什么
【发布时间】:2016-04-30 09:16:12
【问题描述】:

我正在使用 C++ 编写高性能代码,并且一直在使用 CUDA 和 OpenCL 以及最近我非常喜欢的 C++AMP。但是我有点担心它没有被开发和扩展并且会消亡。

让我产生这种想法的原因是,即使是 MS C++AMP 博客也已经沉寂了大约一年。看看 C++ AMP 算法库http://ampalgorithms.codeplex.com/wikipage/history,一年多来似乎什么都没有发生。

我看到的唯一发展是现在 LLVM 有点支持 C++AMP,所以它不仅仅是 windows,但仅此而已,而不是广为人知的东西。

您知道正在进行什么样的工作(如果有的话)?

【问题讨论】:

  • 您可能需要寻找支持导出到设备的 OpenMP 4.0。我在 clang ML 上看到他们正在处理 GPU 代码生成,但我不知道当前状态。由于 OpenMP 3.0 是在 clang 3.6 中出现的,我猜另一个会稍后出现。
  • 感谢您的提示。我不知道 openmp 现在支持 gpu。不过,这不是我有任何个人经验的“框架”,但它看起来确实很有趣。再看一遍之后,我实际上想知道为什么您要使用 CUDA、OpenCL 或 AMP 而不是 OpenMP?似乎以一般的方式提供了很多相同的功能,但也许我还不够了解这些问题。
  • OpenMP 将为您“生成”代码。这很棒,但它可能没有预期的那么有效。在这些情况下,您可能需要编写 CUDA 代码以提高效率。就像您可能编写 sse/avx 代码一样,因为编译器无法成功矢量化循环。但我同意,从长远来看,如果我们能够依赖这些功能会更好!
  • 现在一个有趣的细节是我有一些繁重的并行代码(n-body),我使用的是 Microsoft 的 PPL(如 Intel 的 TBB),并且运行良好。我将循环切换到动态调度 OpenMP,它直接“开箱即用”将计算速度提高了 25%。我仍然不太清楚该怎么做,但我很喜欢它:-) 我还没有尝试过 OpenMP 4.0+,因为我需要另一个编译器而不是 Visual Studio 中的编译器。另请注意,它显然暂时仅适用于 NVidia。
  • 我只是在看 C++ AMP,我同意它很好。但我更喜欢 AMD 的 HCC 实施。 Waldemar 在下面提到了这一点。 AMD的HCC几乎是AMP,但现在是标准的C++。 AMD 还支持原始 C++ AMP 的一个版本。 github.com/RadeonOpenCompute/hcc/wiki

标签: c++ c++11 gpgpu c++-amp


【解决方案1】:

让我产生这种想法的原因是,即使是 MS C++AMP 博客也已经沉寂了大约一年。看看 C++ AMP 算法库http://ampalgorithms.codeplex.com/wikipage/history,一年多来似乎什么都没有发生。

我曾经从事 C++AMP 算法库的工作。在 Microsoft 整合的初始版本之后,我构建了许多附加功能并将其移植到更新版本的 VS。 C++AMP 似乎失去了动力。我没有计划在这个项目上做进一步的工作。

随心所欲。也许微软的人可以澄清一下?

【讨论】:

  • 感谢您提供了一个比较明确的答案。您是“The C++AMP”一书的作者之一,但现在没有在这本书上工作,这使得假设 c++amp 或多或少死了一个相当明确的案例。真是太糟糕了。在我看来,这是一个非常有前途的举措,但我猜 CUDA 和 OpenCL 并不愿意让步。我想知道你认为现在大规模并行的最佳工具是什么?
  • 遗憾的是 ms 对此保持沉默,因为我认为它是一个非常好的库(除了困难的平铺选项)。
  • 听到这个消息非常难过。目前只是阅读 C++ AMP 书籍,对于像我这样的 C++ 程序员来说,这似乎是通往 GPU 的一条更容易的途径。我现在想知道我是否应该放弃它并转而使用 OpenCL。顺便说一句,这是一本很棒的书,而 MS 在这方面做得更多,这让我感到羞耻。
【解决方案2】:

我发现 AMD 仍在使用 C++AMP.. http://developer.amd.com/community/blog/2015/09/15/programming-models-for-heterogeneous-systems/ http://developer.amd.com/community/blog/2015/01/19/bolt-1-3-whats-new/ 并且有一些论坛参考资料也提到了英特尔。

我看到的主要事情是,我们程序员终于开始尝试我们也可以将 GPU 用于普通任务的想法。尤其是现在 HBM 正在使用 APU,您可以在相对便宜的系统上做很多事情。 因此,无需将数据复制到显卡或主内存,而是将其保存在 BIG HBM“缓存”中,可以“实时”访问,即没有 GPU 延迟。

因此,微软构建了一项非常非常好的技术,该技术仅在未来几年内才会变得相关,即硬件最终“用户友好”时。 但是,如果他们不像其他人那样进步,这件事可能会过时。并不是说某些东西在 C++ AMP 中不起作用,而是因为最近变化的速度如此之大,以至于程序员不会冒险开始使用它,如果他们没有看到一些进步……至少每年一两个博客,他们用它测试了一些东西,让你看到微软仍然相信它。

【讨论】:

    【解决方案3】:

    FWIW 我们也在金融界使用 C++AMP。非常成功相对容易编码。 CUDA 可能是一个更安全的选择,但如果有人正在考虑学习 AMP,我建议先复习一下你的基本 STL,然后再阅读数组视图。

    【讨论】:

      【解决方案4】:

      我仍在使用 amp。现在我正在制作一个用于游戏的 gpu 路径跟踪器(希望如此)。

      令人遗憾的是,amp 目前没有太多文档或许多新更新。它绝对是我希望看到更新和更多使用的东西,但它已经死了。

      【讨论】:

        猜你喜欢
        • 2012-02-23
        • 1970-01-01
        • 2016-07-30
        • 1970-01-01
        • 2011-05-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多