cuda block grid等介绍

您所在的位置:网站首页 我是一个说唱歌手英文 cuda block grid等介绍

cuda block grid等介绍

2023-06-10 19:12| 来源: 网络整理| 查看: 265

这里写目录标题 cuda层次结构程序架构层次结构cuda程序调用cuda 内置变量GPU内存模型内存结构 可编程内存内存作用域寄存器本地内存共享内存共享内存访问冲突常量内存全局内存gpu缓存

cuda层次结构

在这里插入图片描述

程序架构

在这里插入图片描述

申请内存时是线性的内存,需要知道是按行还是按列排列 设计的好的话内存是对齐的 我们希望线程和内存都是线性排列对齐,效果就会很好。

层次结构

在这里插入图片描述 grid每个维度有多少block block则是定义每个维度有多少线程

cuda程序调用

在这里插入图片描述

cuda 内置变量

在这里插入图片描述 建立全局一维排序,从而建立宏 从而按照逻辑顺序处理整个向量

处理矩阵的话可以用二维的网格和块

在使用 CUDA 进行矩阵乘法等大规模矩阵计算时,通常需要将输入矩阵按照块的形式划分为多个子矩阵,然后分配到不同的线程块中去计算,以充分利用GPU并行计算的优势。

对于二维的网格和块而言,其可以很好地描述矩阵的结构,这样可以方便地对每个块做相对应的操作。比如,我们可以定义一个2D线程块,其中每个线程块由多个2D线程组成,每个线程处理一个小块或者一个小行/列。然后,我们可以按行、列或元素交错地访问内存,使所有线程能更加高效地并行访问主机内存。

在处理一维向量时,可以考虑将其作为一个一维数组,在代码中可以从全局索引映射到局部索引。在这种情况下,通常需要对齐内存以提升访问速度和性能。具体来说,可以使用 __align__(n) 修饰符来对变量进行对齐处理,将其地址对齐到 n 的倍数上。例如,使用 __align__(16) 可以将变量地址对齐到16字节边界上。

对于单个块的情况,可以使用共享内存来提高访问速度,以便线程块中的所有线程都可以快速、有效地访问它。同时,在使用共享内存时,需要确保线程块中的线程都能够正常读写,以避免竞争条件的发生。

总之,在 CUDA 中处理矩阵和向量时,需要根据任务的具体特点进行灵活选择和处理,以充分发挥GPU并行计算的优势。

GPU内存模型 内存结构

在这里插入图片描述 在这里插入图片描述 每个MP都有L1,还有通过L2共享,和全局相连 在这里插入图片描述

可编程内存

可读可写

不可编程内存 cpu和gpu自己管理的内存 在这里插入图片描述

内存作用域

线程自己的内存一般都是用完了就释放了 在这里插入图片描述

寄存器

在这里插入图片描述

本地内存

在这里插入图片描述

共享内存

在这里插入图片描述 比方共享32k L1自己的16k 在这里插入图片描述

共享内存访问冲突

在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 有一些优化机制,比如说广播

常量内存

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

全局内存

常说的显存,比方说8g 16g 延迟最高,通过l2和mp相连

读的时候有cache 写的时候没有 GPU通过cache大幅度提高效率 在这里插入图片描述 在这里插入图片描述 有些数据用不到会降低吞吐量

gpu缓存

在这里插入图片描述 因为这些缓存的存在提前将要读的数据 load, 极大提高效率



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3