使用CUDA创建标识矩阵

时间:2013-04-14 10:07:50

标签: cuda

您好我尝试使用CUDA创建一个单位矩阵,但输出只是:零

__global__ void initIdentityGPU(int *devMatrix, int numR, int numC) {

    int x = blockIdx.x;
    int y = blockIdx.y;

    int offset = x * y;

    for (int i = 0; i < x ; i++) {

        for (int j = 0; j < numR; j++) {
            if (i == j)
                devMatrix[offset] = 1;
            else
                devMatrix[offset] = 0;

        }

    }

}

为什么只放0?

1 个答案:

答案 0 :(得分:4)

最简单的方法是:

__global__ void initIdentityGPU(int **devMatrix, int numR, int numC) {
    int x = blockDim.x*blockIdx.x + threadIdx.x;
    int y = blockDim.y*blockIdx.y + threadIdx.y;
    if(y < numR && x < numC) {
          if(x == y)
              devMatrix[y][x] = 1;
          else
              devMatrix[y][x] = 0;
    }
}

然后将其启动为:

dim3 blockDim(BLOCK_DIM_X, BLOCK_DIM_Y);  
dim3 gridDim((numC + BLOCK_DIM_X - 1) / BLOCK_DIM_X, (numR + BLOCK_DIM_Y - 1) / BLOCK_DIM_Y);
initIdentityGPU<<<gridDim, blockDim>>>(matrix, numR, numC);

它只运行与矩阵单元格一样多的线程,每个线程获得其单元格的坐标,如果单元格在矩阵的对角线中,则分配10。请注意,代码未经测试。