CUDA编程:Thread,Block,Grid

版权声明:本文为博主原创文章,未经作者允许请勿转载。 https://blog.csdn.net/heiheiya https://blog.csdn.net/heiheiya/article/details/81558660

Thread是CUDA最基本的执行单元,多个threads组成一个block,多个blocks组成grid。

现在的GPU一个block最多可以分配1024个threads。

Block中的threads可以是一维、二维、三维的,grid中的blocks也可以是一维、二维、三维的。Block可以通过内建变量blockIdx索引,block的维度可以用dim3类型的内建变量blockDim访问。

// 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);
    ...
}

猜你喜欢

转载自blog.csdn.net/heiheiya/article/details/81558660