我已经习惯了一段时间,但无法为此找到合适的答案:
CUDA中是否存在就地对角矩阵转置的实现?
我知道 cublas geam ,但这需要创建另一个矩阵。我尝试了一个简单的实现:CUDA In-place Transpose Error
但是,这仅适用于方形矩阵。有人可以向我解释为什么这个逻辑对于对角矩阵不起作用?然而,“天真”的换位方法有效,但它没有到位。
答案 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]);
}
}