【发布时间】:2013-06-19 12:17:33
【问题描述】:
我正在寻找一种方法来找到矩阵的伪逆,以便可以在 GPU 上完成。 SVD/QR 难以并行化并且不支持但 MATLAB 的 GPU,但似乎 LU 虽然可以并行运行,但 MATLAB 的 GPU 也不支持。我比较了性能,它似乎比在单核 CPU 上运行要慢。
我正在寻找可以使用的伪逆(甚至是方阵的正则逆)。根据 Matlab,使用 mldivide() 执行适用于 GPU 的高斯消除。
我尝试使用 A\I,但不幸的是它在 GPU 上无法高效运行。
有没有人可以指导我找到并行 LU 或高斯消除的优化代码?
我听说过 MAGMA 包,但安装和编译似乎需要做很多工作,我真的需要这个简单的东西。
也欢迎提供 C++ 代码。
谢谢, 吉尔
【问题讨论】:
-
您的问题听起来令人困惑...
A \ eye(size(A, 1))通常不是A的摩尔彭罗斯伪逆;此外,MATLAB 对 gpu 上的 SVD 有一些支持。为了给您一个明智的答案,我们需要更多信息:A的大小、等级和其他属性,以及您对哪种类型的广义逆感兴趣。广义逆很少用于线性代数:说明实际情况您试图通过计算A的广义逆来解决的问题也可能有用。 -
afaik,MATLAB 使用 MAGMA 包在 GPU 上进行一些操作。以下是
gpuArray支持的功能列表:mathworks.com/help/distcomp/using-gpuarray.html#bsloua3-1 -
@Gil:
pinv(A)是 similar toV*diag(1./diag(S))*U'其中[U,S,V] = svd(A)。但正如前面所说,你很少需要矩阵本身的逆矩阵,mldivide/mrdivide通常是你使用的。
标签: c++ matlab gpu linear-algebra matrix-inverse