cuda编程入门


参考blibli

P2 CUDA编程入门01-GPU硬件架构综述

在这里插入图片描述

bank的访问冲突

在这里插入图片描述
在这里插入图片描述
冲突的情况
在这里插入图片描述

规约的一个有效的算法

在这里插入图片描述

p3 CUDA编程模型

在这里插入图片描述

CUDA程序执行流程

在这里插入图片描述##### Block和grid的关系
在这里插入图片描述

CUDA程序层次结构

在这里插入图片描述

CUDA kernel函数的grid, block调用情况

在这里插入图片描述

注意用__global__定义的kernel是异步的:调用这个函数cpu就走了,不管GPU是否算完,不会等待GPU完成,而GPU会一个个执行kernel函数

CUDA内置变量

在这里插入图片描述

P4向量加法
# GPU申请内存的函数:
cudaMalloc((void **)&dx, nbytes) //你首先得给我一个pointer to pointer of sth, 然后你要申请多少内存空间

在这里插入图片描述

P5Grid-Block-Warp-Thread
CUDA程序层次结构

在这里插入图片描述
在这里插入图片描述

P6GPU内存介绍

左边是Device的图
右边是单个Multi-processor的图
在这里插入图片描述
GPU内存类型
在这里插入图片描述

P7内存如何管理

内存管理,全局内存是我的数据主要存放的地方,共享内存就是block内线程数据共享和同步
在这里插入图片描述

CPU内存

栈的内存有限几M,堆的话看电脑32G,64G
在这里插入图片描述

GPU内存

在这里插入图片描述

GPU全局内存分配释放

在这里插入图片描述

统一(unified)内存分配释放

避免GPU和CPU数据传输,因为都可以访问
在这里插入图片描述
同步拷贝: src全部拷贝给dst,这个函数才会终止执行下一个函数
在这里插入图片描述
异步拷贝: 只要启动这个函数就不管了(留着GPU与CPU自己完成),就执行这个函数后面的语句,异步拷贝有一个缺点:就是你不知道是否拷贝完成,你就使用他有可能使用的是以前的旧数据
在这里插入图片描述

共享内存

在这里插入图片描述

常用的使用共享内存的两种方式
在这里插入图片描述

P8内存管理,代码示例

申请内存(cudaMalloc/GPU/, malloc或者cudaMallocHost/CPU/)->内存拷贝(cudaMemcpy)->调用核函数 <<<blockIdx,threadIdx>>> ->内存拷贝->释放内存

P9CUDA程序执行与硬件映射

grid->Block->Thread 对应 Device->SM->CUDA Core

P10什么是规约算法

CUDA不支持global sync,因为全局同步可能造成:

  1. 有block闲置
  2. deadlock
    solution: Decompose into multiple kernels 设计规约算法
    在这里插入图片描述
    多个块block规约如何进行同步:
    在这里插入图片描述
    CUDA没有全局同步的原因:
    死锁状态
    在这里插入图片描述
    解决办法:对规约算法分成多个kernel(本来是多个block进行,现在分/decopose多个kernel),相当于在原来的基础上时间纵轴上加了一个里程碑,一个里程碑完成才能进行下一个里程碑,这样block的资源就释放了
    在这里插入图片描述
    调用kernel示意图,即一个规约运算分为两个kernel但是在调用第二个kernel参与运算时,完成第一个kernel运算会到达一个同步点
    在这里插入图片描述
P11并行规约算法-二叉树算法

策略:
在这里插入图片描述
对于相加的规约算法来说,他的示意图如下,每一次线程操作减半:
在这里插入图片描述
上述示意图的伪代码:
在这里插入图片描述

P12并行规约算法-改进warp divergence

p11的算法,同一warp中的线程执行命令不一样,

P13并行规约算法-改进共享内存访问,消除冲突
P14并行规约算法-改进全局内存访问
P17并行规约算法-成功优化的关键

voliate关键字
在这里插入图片描述

P18完整并行规约算法-三阶段算法与完整代码

在这里插入图片描述

P18完整并行规约算法应用-内积

另一个博主

参考蒙特卡洛家的树

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值