用于矩形矩阵变换的CUDA内核

In-Place CUDA Kernel for Rectangular Matrix Transpose

本文关键字:CUDA 内核 用于 变换      更新时间:2023-10-16

我仔细阅读了一段时间,但找不到合适的答案:

CUDA中有对角矩阵转置的实现吗?

我知道cublas-geam,但这需要创建另一个矩阵。我尝试了一个天真的实现:CUDA原地转座错误

然而,这只适用于方形矩阵。有人能向我解释一下为什么这个逻辑对对角矩阵不起作用吗?不过,换位的"天真"方法是可行的,但它并没有到位。

在四处查看了一段时间后,我发现下面的github页面确实有与英伟达研究论文有关的代码,用于原地转置:

https://github.com/BryanCatanzaro/inplace

这似乎是解决这个问题的正确方法。

看看下面的论文:在位矩阵换位的分解

原位矩阵转置的顺序算法如下(>O(n*m)运行时间):

// in:  n rows; m cols
// out: n cols; m rows
void matrix_transpose(int *a, int n, int m) {
    int i, j;
    for(int k = 0; k < n*m; k++) {
        int idx = k;
        do { // calculate index in the original array
            idx = (idx % n) * m + (idx / n);
        } while(idx < k); // make sure we don't swap elements twice
        std::swap(a[k], a[idx]);
    }
}