__global__
void transpose(double *input, double *output, int *width, int *height)
{
int threadidx = (blockIdx.x * blockDim.x) + threadIdx.x;
int row = threadidx / (*width);
int column = (threadidx+3) % (*height);
output[column * (*height) + row] = input[threadidx];
}
以上是我的线性变换内核。对于 [0, 1, 2, 3, 4, 5, 6, 7, 8] 的输入矩阵,输出矩阵应该是 [0, 3, 6, 1, 4, 7, 2, 5, 8],但是当我使用上述示例运行此代码时,输出为 [0, 3, 6, 0, 0, 0, 0, 0, 0]。我已经用 Python 编写了该算法的串行实现,并且它可以工作。我唯一能想到的是某种线程内存访问问题。有什么帮助吗?谢谢。