有效地解决n个线性系统

问题描述 投票:0回答:1

我有n个(非常大的)独立线性系统(Ax = b_i)。它们都具有相同的A,但b_i对于(i = 1,...,n)是不同的。我想在CUDA中并行解决这两个系统。

我认为在主机中对A进行LU分解可能是最有效的,然后将新的A复制到GPU的常量内存中(因为即使我在设备中执行LU,也只有一个线程应该执行它而其他线程将处于空闲状态。此外,常量内存更快)。有没有更好的方法呢?

另一个问题是,虽然所有线程都使用相同的算法同时解决它们的系统,但它们都是同时访问相同的存储器位置(A [i]),而不是合并的。我该如何优化呢?

谢谢,

cuda gpu linear-algebra equation-solving linear-equation
1个回答
-2
投票

(这假设A是stably可逆n x n矩阵。)

Don't solve a much harder problem just because it seems to parallelize better

设B为列为b_1 ... b_n的矩阵。在我们关于A的假设下,你实际上需要求解一个n×n变量矩阵的方程A X = B,即你的解是A ^ { - 1} B。

所以基本上你有一个矩阵求逆和一个矩阵乘法。无论您将使用哪种软件和硬件,这都成立。对于反转和乘法,只需使用CUBLAS,或cuSparse,或cuSOLVER,或ArrayFire或其他任何解决这些问题的方法最快。

我想你可以把它们放在一起,但我不确定是否有优化。

© www.soinside.com 2019 - 2024. All rights reserved.