0
__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編寫了該算法的串行實現,並且它可以工作。我唯一能想到的是某種線程內存訪問問題。任何幫助?謝謝。簡單的線性變換算法不起作用
錯誤發生在您未向我們顯示的代碼中。請編輯您的問題,以包含最短可能的完整示例來說明問題。 – talonmies
嘗試使用cuda-memcheck。但我用上面的代碼嘗試了它的工作正常。上面的代碼沒有問題。你可能想要顯示完整的代碼來幫助。 –
如果您必須進行並行轉換,我記得CUDA SDK包含一個「轉置」示例。 – JackOLantern