Python版CUDA入门学习笔记

Python版CUDA入门学习笔记

  • 由NVIDIA公司发布,是基于CPU和GPU的异构计算架构,通过PCLe总线连接,基于GPU的并行计算引擎来完成更复杂的计算难题

  • GPU不是一个独立运行的计算平台,可以看成是CPU的协助处理器(CPU所在位置称为主机端host,而GPU所在位置为设备端device)

  • CPU负责处理逻辑复杂的串行程序,GPU重点处理数据密集型的并行计算程序
    在这里插入图片描述

  • Numba:Python版CUDA

  • 传统CPU计算流程:1、初始化,2、CPU计算,3、得到计算结果

  • 在CUDA编程中,引入GPU后,计算流程编程:1、初始化,并将必要的数据拷贝到GPU设备的显存上,2、CPU调用GPU函数,启动GPU多个核心同时进行计算,3、CPU与GPU异步计算,4、将GPU计算结果拷贝回主机端,得到计算结果

  • 一个名为gpu_print.py的GPU程序如下:

from numba import cuda
def cpu_print()
	print("print by cpu.")
	
@cuda.jit
def gpu_print():
	# GPU核函数
	print("print by gpu.")
def main():
	gpu_print[1, 2]()
	cuda.synchronize()
	cpu_print()
	
if __name__== "__main__":
	main()
  • 使用CUDA_VISIBLE_DEVICES=‘0’ python gpu_print.py执行这段代码
  • 在GPU核函数上添加@cuda.jit装饰符,表示该函数是一个在GPU上运行的函数,GPU函数又被称作核函数
  • GPU核函数的启动方式是异步。必要时需要调用cuda.synchronize()来来告知CPU等待GPU执行完核函数后再进行CPU端后续计算,此过程称为同步
  • CUDA将核函数所定义的运算称为线程(thread),多个线程组成一个块(block),多个块组成网格(grid)。用blockDim.x和gridDim.x两个参数来控制block和grid的大小。thread、block、grid的索引均由0开始,某个thread在整个grid中的位置编号为:idx = cuda.threadIdx.x + cuda.blockIdx.x * cuda.blockDim.x
    在这里插入图片描述
  • 应用:互不依赖的CPU函数for循环非常适合放到CUDA thread里做并行计算

在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值