C++ C+中HSA的GPGPU编程体系结构+;矩阵数学

C++ C+中HSA的GPGPU编程体系结构+;矩阵数学,c++,matrix,gpgpu,lapack,blas,C++,Matrix,Gpgpu,Lapack,Blas,GPU计算程序员 我有一个C++程序,它目前依赖于ACML(LAPACK),以反转和多个相当大的单精度FP值矩阵(例如4000×4000)。这些矩阵非常稀疏,尽管它们并不总是很好地适合于对角矩阵,所以我目前无法减少它们。关于这个程序的另一件事是,作为牛顿-拉普森的一部分,我必须做多次(串行)的逆变和乘法。然而,我有几千个排列可以并行进行,每个排列在再次计算和反转雅可比矩阵之前对矩阵做一个小的改变。这都是单精度fp,似乎非常适合GPU。我的问题是 我怀疑我需要使用AMD加速并行处理数学库(APPM

GPU计算程序员

我有一个C++程序,它目前依赖于ACML(LAPACK),以反转和多个相当大的单精度FP值矩阵(例如4000×4000)。这些矩阵非常稀疏,尽管它们并不总是很好地适合于对角矩阵,所以我目前无法减少它们。关于这个程序的另一件事是,作为牛顿-拉普森的一部分,我必须做多次(串行)的逆变和乘法。然而,我有几千个排列可以并行进行,每个排列在再次计算和反转雅可比矩阵之前对矩阵做一个小的改变。这都是单精度fp,似乎非常适合GPU。我的问题是

我怀疑我需要使用AMD加速并行处理数学库(APPML)来支持OpenGL,因为这是我所知道的唯一一个BLAS功能可用的东西(非CUDA,我想成为GPU不可知论者)。我的问题是我没有看到APPML中包含的LAPACK dgetrf和dgetri函数(是的,它们是fp64,但我不需要那个精度)。C++ AMP是不是更好的选择?我对传递指针而不是复制数据的HSA特性非常感兴趣,因为这里有很多数据,一些计算仍然在CPU上完成。我相信如果不是这样的话,复制开销会让我丧命。最终,性能是关键,我希望做出正确的体系结构决策,使自己能够在未来6个月内实现HSA GPU的最高性能

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

C++ +AMP,微软的C++扩展,用于GPU计算,也已经更新了即将到来的VS2013。我认为最大的特性是,C++的AMP程序也将在APUS/SOCS上获得共享内存特性,编译器和运行时能够消除CPU和GPU之间的额外数据拷贝。此功能也将仅在Windows 8.1上可用,它可能构建在“映射默认缓冲区”之上,因为Microsoft的AMP实现在后台使用Direct3D。C++的AMP还带来了一些不错的补充,包括增强的纹理支持和更好的调试能力。 如有任何想法、其他问题或讨论,将不胜感激