CUDA 2: 线程模型

本文详细介绍了CUDA线程模型的三个层次:线程块、线程网格和线程,展示了如何通过它们进行组织和大规模并行计算。通过实例代码展示了如何在CUDA中使用这些概念。
摘要由CSDN通过智能技术生成

CUDA线程模型包括三个层次:线程块(Block)、线程网格(Grid)和线程(Thread)。

线程块(Block):线程块是并行执行的线程集合,线程块内的线程共享一些资源,比如共享内存。线程块的大小可以在编译时确定,也可以在运行时动态设定。每个线程块都有一个唯一的块ID,通过这个ID,线程可以定位到自己在块中的位置。

线程网格(Grid):线程网格是一组线程块的集合。同一个线程网格中的线程块共享一些资源,比如全局内存。线程网格的大小可以在编译时确定,也可以在运行时动态设定。每个线程网格都有一个唯一的网格ID,通过这个ID,线程可以定位到自己在网格中的位置。

线程(Thread):线程是执行的基本单位,是实际执行计算的操作对象。每个线程有一个唯一的线程ID,通过这个ID,线程可以定位到自己在块中的位置。CUDA的线程模型基于二维的线程块和三维的线程网格,通过这两个层次的组织,可以实现大规模的并行计算。

总的来说,CUDA的线程模型通过层次化的组织结构,使得大规模的并行计算成为可能。

不同组合形式

二维Grid一维Block:
int blockld blockldx.y gridDim.x blockldx.x;
int id blockld blockDim.x threadldx.x;
二维Grid二维Block:
int blockld blockldx.x blockldx.y gridDim.x;
int id blockld (blockDim.x blockDim.y)+(threadldx.y blockDim.x)+threadldx.x;
二维Grid三维Block
int blockld blockldx.x blockldx.y gridDim.x;
int id blockld *(blockDim.x blockDim.y blockDim.z)
+(threadldx.z *(blockDim.x blockDim.y))
+(threadldx.y blockDim.x)+threadldx.x;

例子:

#include <stdio.h>
__global__ void hello_from_gpu()
{
    const int bid = blockIdx.x;
    const int tid = threadIdx.x;
    const int id = threadIdx.x + blockIdx.x * blockDim.x; 
    printf("block %d and thread %d, global id %d\n", bid, tid, id);
}

int main(void)
{
    hello_from_gpu<<<3, 4>>>();
    cudaDeviceSynchronize();
    return 0;
}

wcx@wcx:~/Desktop/CUDATest$ nvcc hello.cu -o hello
wcx@wcx:~/Desktop/CUDATest$ ./hello 
block 1 and thread 0, global id 4
block 1 and thread 1, global id 5
block 1 and thread 2, global id 6
block 1 and thread 3, global id 7
block 2 and thread 0, global id 8
block 2 and thread 1, global id 9
block 2 and thread 2, global id 10
block 2 and thread 3, global id 11
block 0 and thread 0, global id 0
block 0 and thread 1, global id 1
block 0 and thread 2, global id 2
block 0 and thread 3, global id 3
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值