用于矩形矩阵转置的就地CUDA内核

时间:2014-10-17 23:50:08

标签: c++ matrix cuda transpose

我已经习惯了一段时间,但无法为此找到合适的答案:

  

CUDA中是否存在就地对角矩阵转置的实现?

我知道 cublas geam ,但这需要创建另一个矩阵。我尝试了一个简单的实现:CUDA In-place Transpose Error

但是,这仅适用于方形矩阵。有人可以向我解释为什么这个逻辑对于对角矩阵不起作用?然而,“天真”的换位方法有效,但它没有到位。

2 个答案:

答案 0 :(得分:3)

环顾四周后,我找到了以下github页面,其中包含与nvidia研究论文相关的代码,用于就地转置:

https://github.com/BryanCatanzaro/inplace

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

答案 1 :(得分:2)

查看以下文件:A Decomposition for In-place Matrix Transposition

就地矩阵转置的顺序算法如下(> 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]);
    }
}