3

GPU 计算程序员,

我有一个 C++ 程序,它目前依赖 ACML (LAPACK) 来反转和多个相当大的单精度 fp 值矩阵(例如 4,000 x 4,000)。这些矩阵非常稀疏,尽管它们并不总是很好地适合对角矩阵,所以我目前无法减少它们。关于这个程序的另一件事是,作为 Newton Rapson 的一部分,我必须多次(连续地)反转和乘法。但是,我有几千个可以并行完成的排列,每个排列都对矩阵进行微小的更改,然后再次计算和反转雅可比行列式。这都是单精度 fp,似乎非常适合 GPU。我的问题是这个...

我怀疑我需要将 AMD Accelerated Parallel Processing Math Libraries (APPML) 用于 OpenGL,因为这是我知道的唯一可用于 BLAS 功能的东西(非 CUDA,我想与 GPU 无关)。我的问题是我没有看到 APPML 中包含的 LAPACK dgetrf 和 dgetri 函数(是的,这些是 fp64,但我不需要那种精度)。C++ AMP 会是更好的选择吗?我对传递指针而不是复制数据的 HSA 功能非常感兴趣,因为这里有很多数据在传输,并且一些计算仍然在 CPU 上完成。我相信复制开销会杀了我。归根结底,性能是关键,我想做出正确的架构决策,为自己在未来 6 个月内从 HSA GPU 中获得的最高性能做好准备。

我正在使用 VS 2013 Ultimate 预览版,并且能够利用 C++ AMP 来实现这些 HSA 功能。我只是想确保在我的程序处于起步阶段时,我现在正在做出正确的长期架构决策。这是我在 Anandtech 上找到的一些有趣数据的链接和片段:

http://anandtech.com/show/7118/windows-81-and-vs2013-bring-gpu-computing-updates-to-direct3d-and-c-amp-

C++ AMP 是微软的用于 GPU 计算的 C++ 扩展,也随着即将到来的 VS2013 进行了更新。我认为最大的功能更新是 C++ AMP 程序还将在 APU/SoC 上获得共享内存功能,其中编译器和运行时将能够消除 CPU 和 GPU 之间的额外数据复制。此功能也将仅在 Windows 8.1 上可用,并且它可能构建在“地图默认缓冲区”之上,因为 Microsoft 的 AMP 实现在后台使用 Direct3D。C++ AMP 还带来了一些其他不错的附加功能,包括增强的纹理支持和更好的调试能力。

任何想法、其他问题或讨论将不胜感激!

4

0 回答 0