【问题标题】:Matrix Inversion GPU MATLAB [closed]矩阵求逆 GPU MATLAB [关闭]
【发布时间】: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 to V*diag(1./diag(S))*U' 其中[U,S,V] = svd(A)。但正如前面所说,你很少需要矩阵本身的逆矩阵,mldivide/mrdivide 通常是你使用的。

标签: c++ matlab gpu linear-algebra matrix-inverse


【解决方案1】:

在 MATLAB R2013a 中,LU、QR 和 SVD 都通过 gpuArray 在 gpu 上得到支持。这里有一个支持的函数列表:http://www.mathworks.co.uk/help/distcomp/using-gpuarray.html#bsloua3-1。 gpuArray的线性代数函数都是用MAGMA实现的。

A\b 可以在 GPU 上高效运行,请参见此示例:http://www.mathworks.co.uk/help/distcomp/examples/benchmarking-a-b-on-the-gpu.html。随着问题规模的扩大,您可以期望功能强大的 GPU(例如 Tesla)的运行速度比 CPU 快 5 倍。

【讨论】:

  • 谢谢。我在 GPU 上尝试了 A\eye,它实际上更慢。也许是因为我使用的是 2012b。谢谢!
  • 我认为A\b 在 R2012b 和 R2013a 之间不会有很大的性能差异 - 您的问题规模/GPU 硬件可能更重要。
【解决方案2】:

这篇文章MATRIX INVERSION SPEED UP WITH CUDA可能会有所帮助:

摘要 在这个项目中,开发了几种数学算法来获得矩阵求逆方法——它结合了 CUDA 的并行架构和 MATLAB——实际上比 MATLAB 内置的矩阵求逆函数更快。这种矩阵求逆方法旨在用于图像重建,作为具有可比质量的迭代方法的更快替代方案。本项目开发的算法有Gauss-Jordan消元法、Cholesky分解法、高斯消元法和矩阵乘法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-10-10
    • 1970-01-01
    • 1970-01-01
    • 2021-07-26
    • 2013-02-28
    • 2019-02-23
    • 2017-06-07
    • 2013-05-05
    相关资源
    最近更新 更多