用于矩形矩阵变换的CUDA内核
In-Place CUDA Kernel for Rectangular Matrix Transpose
我仔细阅读了一段时间,但找不到合适的答案:
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]);
}
}
相关文章:
- CUDA内核和数学函数的显式命名空间
- 将 2D 推力::d evice_vector 复矩阵传递给 CUDA 内核函数
- 如何将矢量的数据传递给 CUDA 内核?
- 无法在 cuda 内核中使用我的模板类
- CUDA内核printf()在终端中不产生输出,在探查器中工作
- 编译为 cuda 内核调用提供了"expression must have integral or unscoped enum type"
- 使用模板模式优化 CUDA 内核
- 带有大结构变量的 CUDA 内核函数给出了错误的结果
- CUDA 内核在第二次运行时运行得更快 - 为什么?
- 在CUDA内核中传递一个常数整数
- 如何将函数作为CUDA内核参数传递
- 验证调用 cuda 内核的次数
- cuda 内核调用/传递参数中的编译错误
- 预期;在 CUDA 内核上
- CUDA 内核"Only a single pack parameter is allowed"解决方法?
- 降低CUDA内核运行时:内核中矩阵的动态内存分配
- 如何在多个 GPU 上同时执行 cufftXt 和 CUDA 内核
- 执行 CUDA 内核时黑屏C++输出正确的结果
- CUDA 内核中的竞争条件
- 优化三角矩阵计算的 CUDA 内核执行