有效地解决n个线性系统

时间:2019-03-23 23:57:41

标签: cuda gpu linear-algebra equation-solving linear-equation

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

我当时认为在主机中执行A的LU分解,然后将新的A复制到GPU的恒定内存中可能是最有效的(因为即使我在设备中执行LU,也应仅执行一个线程它和其他线程将处于空闲状态。此外,恒定内存速度更快)。有什么更好的办法吗?

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

谢谢

1 个答案:

答案 0 :(得分:-2)

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

不要仅仅因为它似乎可以更好地并行化而解决更难的问题

让B为列b_1 ... b_n的矩阵。根据我们对A的假设,您实际上需要求解n x n变量矩阵的方程A X = B,即您的解是A ^ {-1} B。

因此,基本上,您有一个矩阵求逆和一个矩阵乘法。无论您要使用什么软件和硬件,这都适用。对于反转和乘法,只需使用CUBLAS或cuSparse或cuSOLVER或ArrayFire或能最快解决这些问题的方法即可。

我想您可以将两者一起做,但我不确定是否有针对性的优化。