cuda 极简学习理解

遇到cuda程序,开始理解学习cuda概念及使用



Cuda  有硬件概念 SP (streaming processor),SM(streaming multiprocessor)

有方便编程的软件概念thread, blocks, grid

各个概念的解释

SP:流处理器,最基本的处理单元,也称为CUDA core,最后具体的指令和任务都是在SP上处理的。GPU进行并行处理,是很多个SP同时做处理。

SM:多个SP加上其他的资源组成的一个streaming multiprocessor。其他资源如 warp scheduler, register, shared memory等。SM可以看做GPU的心脏,register, shared memory是SM的稀缺资源,CUDA将这些资源分配给驻留在SM中的threads(线程)。

以上的硬件结构如下图所示,图中每一个绿色的小块代表一个SP。一个SM包含对个SP。

Thread:是操作系统能够进行运算调度的最小单位。一个CUDA的并行程序会被多个threads来执行。

Blocks:数个threads会被群组成一个block,同一个block中的threads可以同步,也就可以通过shared memory通信。

Grid:多个block会构成grid。

软硬结合的理解:

1,个kernel启动一个grid,一个grid包含几个blocks,一个block包含多个threads。其中block中除了包含threads,还有线程需要使用的共同资源。

GPU并不是一个独立运行的计算平台,而需要与CPU协同工作,可以看成是CPU的协处理器,因此当我们在说GPU并行计算时,其实是指的基于CPU+GPU的异构计算架构。在异构计算架构中,GPU与CPU通过PCIe总线连接在一起来协同工作,CPU所在位置称为为主机端(host),而GPU所在位置称为设备端(device)。

kernel在device上执行时实际上是启动很多线程,(关于kernel的理解这篇文章解释的很容易懂:https://zhuanlan.zhihu.com/p/34587739)一个kernel所启动的所有线程称为一个网格(grid),同一个网格上的线程共享相同的全局内存空间,grid是线程结构的第一层次,而网格又可以分为很多线程块(block),一个线程块里面包含很多线程,这是第二个层次。线程两层组织结构如下图所示,这是一个gird和block均为2-dim的线程组织。grid和block都是定义为dim3类型的变量,dim3可以看成是包含三个无符号整数(x,y,z)成员的结构体变量,在定义时,缺省值初始化为1。因此grid和block可以灵活地定义为1-dim,2-dim以及3-dim结构,对于图中结构(主要水平方向为x轴),定义的grid和block如下所示,kernel在调用时也必须通过执行配置<<<grid, block>>>来指定kernel所使用的线程数及结构。

 编程中矩阵对线程和block个数的设置

给kernel传参数的方法:

  dim3 grid(3, 2);

  dim3 block(5, 3);

  kernel_fun<<< grid, block >>>(prams...); 设置kernel_fun核函数的参数及输入变量

 

使用示例:

// Kernel定义
__global__ void MatAdd(float A[N][N], float B[N][N], float C[N][N])
{
    int i = blockIdx.x * blockDim.x + threadIdx.x;
    int j = blockIdx.y * blockDim.y + threadIdx.y;
    if (i < N && j < N)
        C[i][j] = A[i][j] + B[i][j];
}
int main()
{
    ...
    // Kernel 线程配置
    dim3 threadsPerBlock(16, 16);
    dim3 numBlocks(N / threadsPerBlock.x, N / threadsPerBlock.y);
    // kernel调用
    MatAdd<<<numBlocks, threadsPerBlock>>>(A, B, C);
    ...
}

kernel的这种线程组织结构天然适合vector,matrix等运算。

参考网址:

https://zhuanlan.zhihu.com/p/34587739

https://blog.csdn.net/asasasaababab/article/details/80447254

https://blog.csdn.net/qq_41598072/article/details/82877655

原文地址:https://www.cnblogs.com/xiaoheizi-12345/p/12234078.html

时间: 2024-10-10 17:12:58

cuda 极简学习理解的相关文章

个人--极简学习笔记002

如果用一个词来形容极简消费观的话,我觉得是:成熟.在我们现在的社会中,消费主义是主流思想.每天我们都要被动地被广告成千上万次,在这样密集的轰滥炸式的灌输之下,有几人能保持理性消费?广告的作用并不是简单地宣扬产品的优点,其真正的目的是营造一种气氛,造成一种假象,让你感觉必须使用这种产品你才能幸福.但是,从过去成千上万次的消费经验中,我们很容易就能发现,购买不能让我们感到真正的快乐.但是那些看上去很好.实际没用的东西却让我们付出巨大的代价.我们需要加更多的班,挣更多的钱去还信用卡:我们减少了陪家人的

个人--极简学习笔记003

2015.07.24 仓库---住所 现在当下(快活)--未来过去(不快活) 需要,合适,舒服 我的极简生活 2015-03-----2015-05  不增加衣物,不增加卡片 超过自己管理能力的物品,不持有不留恋的物品,不持有无法回归自然或转让给其他人的物品,不持有和自己或自己的生活风格不符的物品,不持有生命本身就是一场体验,只经历,不占有.不持有的生活不仅是提倡绿色环保,节俭,乐活,更是精神压力的释放与解脱,内省,灵修,心灵成长和达到各方面的平衡.每天使用到的东西要斤斤计较,就是常用的东西都要

个人--极简学习笔记

Purpose:To eliminate unnecessary personal items.Operational definition:Personal item means the stuff is only used by myself.In scope:All my personal items.Out of scope: Stuff shared with others, books and electric chargers.Personal item list:Clothes:

JavaScript学习总结(十三)——极简主义法编写JavaScript类

前两天在网上无意中发现了一篇使用极简主义法定义JavaScript类的文章,原文链接,这个所谓的"极简主义法"我还是第一次听说,是荷兰程序员Gabor de Mooij提出来的,这种方法不使用this和prototype,代码部署起来非常简单,这大概也是它被叫做"极简主义法"的原因.下面就介绍如何使用极简主义法完成JavaScript的封装和继承 1. 封装 首先,它也是用一个对象模拟"类".在这个类里面,定义一个构造函数createNew(),

[深度学习工具]&#183;极简安装Dlib人脸识别库

[深度学习工具]·极简安装Dlib人脸识别库 Dlib介绍 Dlib是一个现代化的C ++工具箱,其中包含用于在C ++中创建复杂软件以解决实际问题的机器学习算法和工具.它广泛应用于工业界和学术界,包括机器人,嵌入式设备,移动电话和大型高性能计算环境.Dlib的开源许可证 允许您在任何应用程序中免费使用它.Dlib有很长的时间,包含很多模块,近几年作者主要关注在机器学习.深度学习.图像处理等模块的开发. 安装 此博文针对Windows10安装,其他平台可以仿照这个步骤来安装 安装Minicond

Vim,极简使用教程,让你瞬间脱离键鼠切换的痛苦

写之前,脑子里觉得可以最常用操作的来熟悉Vim,内容不多,写了一半确发现,即使是最常用的操作,讲完也要写好多,已经不能叫什么极简教程了,不过既然写了,就这样吧 都说Vim很难学,是的,相对于鼠标来讲,肯定是超难学了.但它的好处真的非常多,特别是对于敲代码的同学.关于这些问题,今天就不讨论了,这里主要说的是,只要记住小小的一部分操作,就可以很轻松的使用Vim,仍然可以极大的提高敲代码的效率哦. 网上很多介绍Vim的文章,都在介绍它强大的操作,其实加大了学习的难度,我简单的总结了一下,要使用Vim只

极简产品与精益创业是一种怎样的体验?

这是湖南自媒体联盟的报道.本文修改了部分配图和敏感信息. 今日人物:苏元 毕业于北京大学市场营销方向, 曾供职于大型国企和电力行业内领先的外资企业, 现在在超级表格担任COO 感受一下这个年代,一个到处都在讲着"互联网"."互联网+"."创业"."情怀"的年代,各种宣讲会.各种绝密资料,为什么我们反而越来越迷茫?一个看起来四处都可以捡机会,到处都藏风口的年代,为什么我们反而不是那么容易做成想做的事? 很多人都喜欢引用狄更斯的&

3星|《AI极简经济学》:AI的预测、决策、战略等方面的应用案例介绍

AI极简经济学 主要内容是AI的各种应用案例介绍.作者把这些案例分到五个部分介绍:预测.决策.工具.战略.社会. 看书名和介绍以为会从经济学的角度解读AI,有更多的新鲜的视角和观点,读后比较失望,基本是见过的案例和视角. 总体评价3星,有参考价值. 以下是书中一些内容的摘抄,[]中是我根据上下文补充的信息: 1:<纽约时报>将这次比赛形容为中国的“斯普特尼克时刻(Sputnik moment)”.正如苏联发射人造卫星“斯普特尼克号”使得美国大力投资科研,中国对这一事件[AlphaGo战胜李世石

【得到每天听本书】开口就能说重点-极简君解读

这本书就是教我们"如何在最短的时间,把最重要的事情说明白". 1.一个简单的训练法:一分钟训练法. 一分钟训练法主要就是提升信息概括能力,从结论说起!需要的工具分别是三色圆珠笔.秒表以及一个录音设备. 用红色笔写下这个主题讲话的关键字,用蓝色笔对必须要说的内容进行标注,绿色则标注你觉得有趣的部分.同时,也可以做一个结构性的时间分配,1分钟可以分为3个20秒,或者4个15秒,分别来讲述不同的部分. 一分钟训练注意三点:严格计时客观反映自己一分钟输出能力:发声练习避免脑中意识模糊不清:对录