【分布式】CUDA编程模型

本文介绍了CUDA编程模型,强调了GPU的并行计算特性。CUDA程序包括CPU控制的串行部分和GPU执行的并行部分,通过Kernel进行计算。GPU的线程组织为grid、blocks和threads,同一block内的线程可共享内存和同步。Warp是GPU真正并行执行的单位,由最多32个线程组成,避免线程同时做多件事以保持性能。CUDA编程中合理分配block大小和利用共享内存对于提升效率至关重要。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

GPU 的架构决定了(众多的计算单元 ALU)它要解决的问题和 CPU 完全不同:CPU 去做相对较少的高级计算,而 GPU 是做大量的、机械的计算。GPU 无法单独工作,必须由 CPU 进行控制调用才能工作。CPU 可单独作用,处理复杂的逻辑运算和不同的数据类型,但当需要大量的处理类型统一的数据时,则可调用 GPU 进行并行计算。

CUDA 程序分两部分:执行在 host(CPU) 内的串行 C 程序,和其中嵌入的并行 C 程序,并行 C 交由 device(GPU)执行。可以把 GPU 想象为一个IO,串行程序执行到并行部分的时候,就会调用 GPU,把计算所需的数据和计算任务传给它。这些并行 C 程序称为核(Kernel)。由于要向 GPU 传输数据,所以 Kernel 执行前需要显式地在 GPU 上分配空间(cudaMalloc)并传输(cudaMemcpy)。

CPU 内的线程往往是共用一个 core,可能是通过上下文切换来表现出并行的特性。GPU 由于其计算任务的特性,访存频率远高于 CPU。GPU 也是多个线程共用一个 core,当一个线程需要访存(即中断)退出当前的 core,则马上进来一个新的线程使用这个 core。这种频繁的上下文切换隐藏了访存的开销。同时,为了加快上下文切换的速度,即访存速度,每一个 core 都有一套自己的 register,线程只需要与寄存器进行数据交互,寄存器和内存的交互对于线程来说是透明的。

一个 Kernel 在 GPU 里是由多组 block 执行的,一组 block 称为一个 grid。每

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值