python并行编程 - GPU篇

目录1

介绍篇
线程篇
进程篇
异步篇
GPU篇
分布式篇


准备

  1. 需要有支持CUDA的Nvidia显卡
    linux查看显卡信息:lspci | grep -i vga
    使用nvidia显卡可以这样查看:lspci | grep -i nvidia
    上一个命令可以得到类似"03.00.0"的显卡代号,查看详细信息:lspic -v -s 03.00.0
    查看显卡使用情况(nvidia专用):nvidia-smi
    持续周期性输出使用情况(1秒1次):watch -n 1 nvidia-smi
  2. 需要安装pycuda(linux安装:apt install python3-pycuda)

基本使用

1.底层操作

  1. 准备工作: sudo apt install python3-pycuda
  2. 在cpu使用的内存中创建矩阵
  3. 将矩阵从cpu使用的内存移动到gpu的显存中
  4. 编辑c语言代码,让gpu计算
  5. 将矩阵从gpu显存移动到cpu使用的内存中

内核与线程层级
CUDA程序的一个最重要元素就是内核(kernel),它代表可以并行执行的代码
每个内核的执行均有叫做线程(thread)的计算单元完成,与cpu的线程不同,gpu线程更加轻量,上下文切换不会影响性能
为了确定运行一个内核所需的线程数机器逻辑组织形式,CUDA定义了一个二层结构。在最高一层,定义了所谓的区块网格(grid of blocks),这个网格代表了线程区块所在的二维结构,而这些线程区块则是三维的(简单来说,一个cuda结构包含多个blocks,每个blocks包含多个thread)(在下面还会对每个线程区块细分操作)

一个线程区块会被指派给一个流式多处理器(SM),然后这些线程被进一步划分为被称为warp的线程组,其大小有GPU的架构决定
为了充分发挥SM本身的并发性,同一组内的线程必须执行相同的指令,否则会出现线程分歧(divergence of thread)

示例:
用gpu将矩阵每个元素x2

import pycuda
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值