1
有,顯示2D陣列的樣品:創建CUDA C節目指南文檔中的2D陣列具有CUDA
// Kernel definition
__global__ void MatAdd(float A[N][N], float B[N][N], float C[N][N])
{
int i = blockIdx.x * blockDim.x + threadIdx.x;
int j = blockIdx.y * blockDim.y + threadIdx.y;
if (i < N && j < N)
C[i][j] = A[i][j] + B[i][j];
}
int main()
{
...
// Kernel invocation
dim3 threadsPerBlock(16, 16);
dim3 numBlocks(N/threadsPerBlock.x, N/threadsPerBlock.y);
MatAdd<<<numBlocks, threadsPerBlock>>>(A, B, C);
...
}
我使用2D陣列具有以下形式和正常工作:
dim3 grid[COLUMNS][ROWS];
kernel_Matrix<<<grid,1>>>(dev_strA, dev_strB, dev_Matrix);
__global__ void add(int *a, int *b, int *c)
{
int x = blockIdx.x;
int y = blockIdx.y;
int i = (COLUMNS*y) + x;
c[i] = a[i] + b[i];
}
有是一種用[] []定義實現二維數組的方法嗎?我測試了這種方式,但不起作用。
也許我誤會問你的問題。你想做什麼?將2D數組傳遞給你的核心函數還是定義2D網格? – stuhlo 2013-04-06 19:54:47
@stuhlo:我想將2d數組傳遞給內核,並使用[] []定義在__global__ void函數中訪問它。 – mahdimb 2013-04-06 20:11:00
您需要修正stuhlo指出的dim3網格定義。那麼你可能想看看[這個問題](http://stackoverflow.com/questions/15799086/cuda-how-to-copy-a-3d-array-from-host-to-device)的一些想法。通常扁二維數組最簡單,但如果你有一個固定大小的數組,你可以在我對這個問題的回答中給出的第一個例子中使用這種方法。 – 2013-04-06 20:35:57