【问题标题】:small Matrix Inversion on CUDACUDA 上的小矩阵求逆
【发布时间】:2015-05-07 11:06:03
【问题描述】:

我需要你的一些建议,希望不会占用你太多时间。

所以这是我的问题: 我有一个小的方形密集矩阵,可能大小为 4x4、8x8、16x16、 我想用 CUDA 来反转它。

问题的特殊部分是我有 1024 个空闲 cuda 线程来执行此任务。 所以我怀疑像 Gauss Jordan 这样最普遍的逆向方法在这里无法正常工作,因为它们略微并行,并且只会使用大量 1024 中的大约 4-16 个线程。

但是我还能如何使用所有可用线程来反转这个矩阵呢?

感谢您的关注!

【问题讨论】:

  • 使用cublasSgetriBatchedcublasSgetrfBatched 概述here
  • 如果需要,并且您有一个支持动态并行的设备,您甚至可以从设备中调用它们,如here
  • 有趣的想法,谢谢。由于其他原因,我不确定它是否适合我的项目,但我会彻底检查它。
  • @IlyaAfanasiev:您可能需要查看 CUDA 注册开发者网站。有实现小矩阵逆的源代码可供下载(BSD 许可证)。如果我没记错的话,使用 Gauss-Jordan,每个线程一个元素。它可能列在“批处理求解器”下。根据您的项目,可能更容易将其合并到您的代码库中,否则我同意 Robert Crovella 的建议。
  • @njuffa 如果你想对此做出回答,我会赞成

标签: matrix cuda parallel-processing inversion


【解决方案1】:

对于此类问题,至少有两种可能的现成选项:

  1. 使用最新版本的 CUBLAS 库中附带的批处理求解器
  2. 使用 NVIDIA 分发给注册开发者的 BSD 许可的 Gauss-Jordan 消除设备代码功能。这些旨在使用每个矩阵一个线程来反转小矩阵

[此答案由 cmets 组装而成,并作为社区 wiki 条目添加,以将问题从未回答队列中删除]

【讨论】:

    猜你喜欢
    • 2015-11-15
    • 2014-03-29
    • 1970-01-01
    • 1970-01-01
    • 2013-05-05
    • 2011-08-30
    • 1970-01-01
    • 2017-07-06
    相关资源
    最近更新 更多