Matrix 使用CUDA的矩阵转置

Matrix 使用CUDA的矩阵转置,matrix,cuda,Matrix,Cuda,我需要转置一个方阵。我使用矩阵测试程序:a[I][j]=0如果I>j,a[I][j]=如果I问题在于超出分配数组的“额外”线程 指定网格块时,您将进行取整(事实上,即使在等分情况下,也会强制取整到下一个整数:) 因此,始终存在ax或ay不在[0,n]范围内的线程。因此,不管怎样,当您将a[aIdx]复制到b[bIdx]中时,您是在将随机数据复制到内存中,实际上可能会根据调度覆盖“真实”数据 您可以通过更改内核以检查以下内容来修复此问题: if (ax < n && ay &

我需要转置一个方阵。我使用矩阵测试程序:
a[I][j]=0如果I>j,a[I][j]=如果I问题在于超出分配数组的“额外”线程

指定网格块时,您将进行取整(事实上,即使在等分情况下,也会强制取整到下一个整数:)

因此,始终存在ax或ay不在[0,n]范围内的线程。因此,不管怎样,当您将
a[aIdx]
复制到
b[bIdx]
中时,您是在将随机数据复制到内存中,实际上可能会根据调度覆盖“真实”数据

您可以通过更改内核以检查以下内容来修复此问题:

if (ax < n && ay < n)
    b[bIdx] = a[aIdx];
dim3 gridSize = dim3 (n/16 + 1, n/16 + 1, 1);
if (ax < n && ay < n)
    b[bIdx] = a[aIdx];
dim3 gridSize = dim3 ((n+15)/16, (n+15)/16, 1);