我有像这个链接那样的矩阵:
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格式等正确编码了问题。我已经测试了一个带有' normal'的虚拟矩阵。 (顺序1)与上面的9 * 9矩阵位于相同位置的数字,并运行具有相同(密集)虚拟A和b的等效Matlab A \ b,这确实为cusolverSpZcsrlsvluHost提供与虚拟数据相同的输出。所以我确信这是我在具有大动态范围的问题中所具有的具体数据的问题。
所以我的问题是,在使用具有大动态范围的矩阵元素之前,是否有其他人遇到过这样的问题,如果是这样,他们如何处理?是否有可以应用于矩阵的技巧/缩放?
magma_zgesv_batched和cusolverSp例程有什么区别?他们不同地进行矩阵求逆等吗?
我是否应该坚持使用magma_zgesv_batched减少尺寸问题,因为我知道这有用吗?
任何建议都非常感谢!
由于
答案 0 :(得分:0)
请注意,在MAGMA中,您必须确定计算字段。
例如,GF(5)中的2 ^ -1等于3,但在实场中等于0.5。
最近我的计算中遇到了58000 * 58000矩阵,这是矩阵的邻接矩阵。用MAGMA计算4小时后我找不到溶液,所以我使用了鼠尾草。 Sage在几分钟内解决了我的问题。
我建议大型矩阵使用圣人。