我有类似于此链接中的矩阵:
https://www.dropbox.com/s/tte3rlfsrprgtt8/ExampleMatrix.txt?dl=0
该示例是9x9稀疏矩阵,其中元素的值在大小上显著不同。例如,最小元素的大小为7.130249e-17,最大元素的大小是1.944061e-07。
这个矩阵是一组线性方程Ax=b中的A矩阵,我需要求解它。在我的应用程序中,A是cuDoubleComplex类型。
目前,我使用magma_zgesv_batched(一次计算多个(目前为25个),每个批次的A和B不同)进行这项工作,该方法通过部分枢轴旋转和行交换进行LU分解。这是有效的,并提供了正确的输出,与我试图加速的原始代码的输出相匹配。我相信这是可行的。
然而,在"现实生活"中,我需要求解的矩阵会大得多,约2000*2000,而magma_zgesv_batched在这方面存在问题,因为它被设计用于小矩阵。它的速度非常慢,并发出使用本机版本的警告。我所做的搜索表明,人们已经使用magma_zgesv_batched将矩阵大小提高到1024*1024,但我自己还没有测试过。
由于矩阵A是稀疏的(并且随着大小的增加将更加稀疏),我考虑使用cuSovlerSp例程,特别是cusolverSpZcsrlsvluHost(具有部分枢轴的传统LU),因为这与magma_zgesv_batched最相似。
然而,这并不能给出正确的结果,因为magma_zgesv_batched。但是,我相信我已经用csr格式等正确地编码了这个问题。我已经在与上面的9*9矩阵相同的位置测试了一个具有"正态"(1阶)数字的伪矩阵,并用相同的(密集)伪a和b运行了等效的Matlab a\b,这确实为伪数据提供了与cusolverSpZcsrlsvluHost相同的输出。所以我确信这是我在大动态范围问题中所拥有的特定数据的问题。
所以我的问题是,如果其他人以前在具有大动态范围的矩阵元素方面遇到过这样的问题,如果遇到了,如何处理?有没有技巧/缩放我可以应用于矩阵?
magma_zgesv_batched和cusolverSp程序之间有什么区别?他们做矩阵求逆等的方式不同吗?
我应该坚持使用magma_zgesv_batched来解决缩小尺寸的问题吗?
非常感谢任何建议!
感谢
请注意,在MAGMA中,必须确定计算字段。
例如,GF(5)中的2^-1等于3,但在实域中等于0.5。
最近在我的计算中,我遇到了58000*5800矩阵,这是图的邻接矩阵。在用MAGMA计算了4个小时后,我找不到解决方案,所以我使用了sage。Sage在几分钟内解决了我的问题。
我建议大矩阵使用sage。