GPU上计算特征值和特征向量的性能较差
Poor performance for calculating eigenvalues and eigenvectors on GPU
在一些代码中,我们需要获得对称实矩阵(Ax=lamba-Bx)的广义特征值问题的自向量和自值。此代码使用LACPACK中的DSPGVX。我们想在GPU上使用MAGMA功能来加速它。我们在这个论坛上询问并得到了关于这个的答案
http://icl.cs.utk.edu/magma/docs/zhegvx_8cpp.html
我们的矩阵(N)的大小从100到50000,甚至更多,与分子中的原子数有关。我们观察到:
a) 对于大于2500(大约)的N,MAGMA就是不起作用;分段故障b) MAGMA的运行速度总是比LAPACK序列慢,大约是的10倍
这种行为正常吗?我们能克服吗?有人能报告任何参考资料吗?在这些参考资料中,任何处理类似问题的人都能获得不错的加速?
感谢
根据我的经验,您可以通过切换到更好的本征解算器来获得更大的性能优势。据我所知,最好的解决方案是ARPACK。如果你的矩阵有一些结构,例如,如果它们是稀疏的,你将获得最大的好处。如果只需要提取本征对总数的一小部分,则该解算器也是最有效的。
我会先尝试这个解决方案来解决你在CPU上运行的问题。您可能会发现,仅此一项就足以满足您的需求。如果没有,那么将ARPACK的计算核心移动到GPU相对容易。或者,有可用的ARPACK的并行版本。
你尝试过CULA吗http://www.culatools.com/?CULA是NVIDIA为CUDA进行的Lapack转换,因此至少在理论上它应该是广义特征值问题的最佳实现之一。我认为单精度版本是免费的,所以你可以试一试。
相关文章:
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- 写入向量<向量<bool>>
- 函数向量_指针有不同的原型,我可以构建一个吗
- C 指针向量如何影响性能
- 在将其尺寸较大的向量移动到容量较小的向量之前,是否可以通过使用Reserve()来提高代码性能
- 比较两个排序的数字向量(性能优先)
- 为什么这个普通的数组实现比STD ::向量实现性能慢
- 几对性能问题(一个较大的向量与较小的块向量),值得存储迭代索引以进行矢量访问
- 与英特尔相比,GNU C++编译器在对向量进行排序时性能较差
- 如果构建和破坏了许多向量,自定义分配器会提高性能<T>吗?
- 指针向量与值向量 大内存块与小内存块的性能损失
- 以最大性能将双精度的向量截断为单精度
- GPU上计算特征值和特征向量的性能较差
- 使用 static_cast 处理混合(基础和派生)对象的向量是否存在性能风险?(又名 "it this a dumb idea?" )
- 列表排序和结构体向量排序之间的性能差距.c++
- 向量,矩阵和四元数的缓存性能
- 对象,引用对象,引用带函数和不带函数的向量元素-观察到的性能差异
- 在并行追加时,使用向量列表和向量的向量对性能的影响
- [ 性能]--- 字符串::运算符+= 与向量<char>push_back
- 函数后向量赋值的性能