__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 でアルゴリズムのシリアル実装を作成しましたが、動作します。私が考えることができる唯一のことは、ある種のスレッドメモリアクセスの問題です。何か助けはありますか?ありがとう。