【发布时间】: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