cuda编程快速了解

原文链接 https://zhuanlan.zhihu.com/p/34587739

一、Gpu的线程结构

要深刻理解kernel,必须要对kernel的线程层次结构有一个清晰的认识。首先GPU上很多并行化的轻量级线程。kernel在device上执行时实际上是启动很多线程,一个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所使用的线程数及结构。

所以,一个线程需要两个内置的坐标变量(blockIdx,threadIdx)来唯一标识,它们都是dim3类型变量,其中blockIdx指明线程所在grid中的位置,而threaIdx指明线程所在block中的位置,如图中的Thread (1,1)满足:

解释
threadIdx.x = 1
threadIdx.y = 1
blockIdx.x = 1
blockIdx.y = 1

二、cuda 编码入门

Gpu的编程,kernel快速了解参考如下,对于flash attention 的分块理解有帮助。

CUDA编程入门极简教程

核心:根据计算的特点,构建合理的block 大小(一维,二维,size), 然后计算出grid 的大小。再计算出变量元素x, y和每一个线程x, y对应关系,将每一个计算单元对应上一个线程。

在cpu 中调用kernel 执行函数,然后将结果读取回cpu的内存。

回读结果到CPU 方式:

1. 手动的拷贝

cudaMemcpy((void*)z, (void*)d_z, nBytes, cudaMemcpyDeviceToHost);

2. cuda内存托管 + cpu, gpu的同步 

// 同步device 保证结果能正确访问cudaDeviceSynchronize();

// 同步device 保证结果能正确访问 cudaDeviceSynchronize();

CUDA编程入门极简教程

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/40799.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

overlap的uORF对TE的抑制程度为什么显著高于non-overlap的uORF

在翻译调控中&#xff0c;上游开放阅读框&#xff08;uORFs&#xff09;对主开放阅读框&#xff08;main ORF&#xff09;的抑制效果有很大差异&#xff0c;尤其是重叠的uORFs&#xff08;overlap uORFs&#xff09;通常比非重叠的uORFs&#xff08;non-overlap uORFs&#xff…

2024年过半,新能源车谁在掉链子?

2024年过半之际&#xff0c;各品牌上半年的销量数据也相继出炉&#xff0c;是时候考察今年以来的表现了。 理想和鸿蒙智行两大增程霸主占据头两名&#xff0c;仍处于焦灼状态&#xff1b;极氪和蔚来作为高端纯电品牌紧随其后&#xff0c;两者之间差距很小&#xff1b;零跑和哪…

Truenas scale入坑

家里有一台刚上大学时配的电脑&#xff0c;看着无用武之地&#xff0c;又还能用&#xff0c;于是想那它来搞个私有云nas。 一、选择想要入的坑 一开始对这块没什么了解和概念&#xff0c;最早是在旧主机上安装了个Ubuntu&#xff0c;然后再安装CassOS小尝试了下。可能CassOS里…

商家转账到零钱申请必过办法详解

微信支付平台会对商家转账到零钱的申请进行严格审核&#xff0c;以确保符合相关规定和政策。但可以通过专业机构协助并遵循正确的流程来实现一次通过&#xff0c;以下是一些建议&#xff1a; 1. 确认主体资格&#xff1a;申请商家转账到零钱必须为企业主体&#xff08;有限公司…

【笔记】linux中启动脚本遇到如下错误

[rootlinuxlocalhost sh]# ./bootStart.sh ./bootStart.sh:行1: o: 未找到命令 自动化部署脚本启动 停止原来运行中的工程 Stop Process... Stop Success! 准备从Git仓库拉取最新代码 开始从Git仓库拉取最新代码 remote: Enumerating objects: 21, done. remote: Counting obj…

关于搞定Assignment写作的4个技巧

澳洲各种科目已经进入期中阶段&#xff0c;诸多老师留下的Assignment也快要到截止日期。那么有什么关于Assignment写作的技巧吗&#xff1f;这篇文章告诉你! 1&#xff1a;不要假设&#xff0c;要寻求理解 不是所有的作业都是一样的。你需要弄清楚这是一篇学术论文、一份商业报…

78110A雷达信号模拟软件

78110A雷达信号模拟软件 78110A雷达信号模拟软件(简称雷达信号模拟软件)主要用于模拟产生雷达发射信号和目标回波信号&#xff0c;软件将编译生成的雷达信号任意波数据下载到信号发生器中&#xff0c;主要是1466-V矢量信号发生器&#xff0c;可实现雷达信号模拟产生。软件可模…

HDFS读写流程详细过程

HDFS读写流程详细过程 HDFS的定义一、组成架构二、优缺点三、读流程四、NameNode和SeconderyNameNode五、写流程 HDFS的定义 HDFS&#xff08;Hadoop Distributed File System&#xff09;&#xff0c;它是一个文件系统&#xff0c;用于存储文件&#xff0c;通过目录树来定位文…

opencv实现人脸检测功能----20240704

opencv实现人脸检测 早在 2017 年 8 月,OpenCV 3.3 正式发布,带来了高度改进的“深度神经网络”(dnn)模块。 该模块支持多种深度学习框架,包括 Caffe、TensorFlow 和 Torch/PyTorch。OpenCV 的官方版本中包含了一个更准确、基于深度学习的人脸检测器, 链接:基于深度学习…

码云项目如何弄到gitlab上面

码云项目如何弄到gitlab上面 git remote -v 可查看当前的远程仓库git remote remove origin 删除当前的远程仓库git remote add origin gitXXXX:XXXX/shares.git 添加新的远程仓库 这个是你在远程gitlab上面创建的一个空仓库的ssh 地址git remote -v 验证新的远程仓库是否添加…

身处奇瑞看三星:既“开卷“又“起火“,却更难受了

三星"起火" 这几天奇瑞的事情&#xff0c;让大家破防了&#xff0c;纷纷表示国内的就业市场环境普遍恶劣。 那我们转个眼&#xff0c;看看海外企业的情况。 最近一周&#xff0c;三星频频登上新闻&#xff0c;颇有"起火"之势。 在刚步入下半年的 7 月 1 日…

C++之boost智能指针

1、boost智能指针 资源获取即初始化&#xff1a;在构造函数中对资源进行初始化&#xff0c;在析构函数中释放。 智能指针的本质思想是&#xff1a;将堆对象的生存期&#xff0c;用栈对象来管理。这个栈对象就是智能指针。 当new 一个堆对象的时候&#xff0c;立刻用智能指针…

AI免费文档处理在线工具:文档总结;论文阅读

1、文档总结 NoteGPT 支持各种类型文档ppt、word、pdf等总结 https://notegpt.io/pdf-summary 另外各种大模型工具一般都支持文档上传总结&#xff1a; 例如kimi、通义等 参考&#xff1a;https://blog.csdn.net/weixin_42357472/article/details/138205261 2、论文阅读 h…

Sylar服务器框架——Http模块

1、http.h 定义了HttpMethod和HttpStatus /* Request Methods */ #define HTTP_METHOD_MAP(XX) \XX(0, DELETE, DELETE) \XX(1, GET, GET) \XX(2, HEAD, HEAD) \XX(3, POST, POST) \XX(4, PUT, …

plugin:vite:import-analysis]No known conditions for“./lib/locale/lang/zh-cn“

将原有引入&#xff1a; import zhCn from element-plus/lib/locale/lang/zh-cn 改成&#xff1a; import zhCn from element-plus/es/locale/lang/zh-cn; 原因版本升级&#xff0c;引入路径改变&#xff08;原先的包在node_modules\element-plus\lib找不到&#xff09; 新…

c++习题09-分离整数的各个数

目录 一&#xff0c;题目 二&#xff0c;思路 三&#xff0c;代码 一&#xff0c;题目 二&#xff0c;思路 一开始我想到的是将简单容易输出的1000以内的数先进行相应的运算&#xff0c;再输出之后再对1000以上的数字进行判断&#xff08;主要还是想先将很大的数变小&#x…

Apache Commons 读写 CSV 文件

文章目录 一、Maven 引入二、代码实现 一、Maven 引入 <!-- https://mvnrepository.com/artifact/org.apache.commons/commons-csv --><dependency><groupId>org.apache.commons</groupId><artifactId>commons-csv</artifactId><versio…

富格林:当心欺诈耽误顺利出金

富格林悉知&#xff0c;在交易中有亏损情况的投资者大多是因为被出金骗局的说辞所欺诈&#xff0c;真以为自己躺着就能赚到钱&#xff0c;到头来却发现血本无归。在此提醒投资者&#xff0c;市场变化是复杂的。如果想做好黄金投资&#xff0c;必须掌握必要的交易技巧。同时要树…

如何自动筛选螺丝不良品?

四角螺丝是一种特殊设计的螺丝&#xff0c;其螺纹头部呈四个平行的角状结构&#xff0c;与传统的六角螺丝相比具有独特的外观和功能。这种设计使得四角螺丝在安装和拆卸时更容易使用&#xff0c;并提供了更好的扭矩传递效率。四角螺丝头部呈现四个平行的角&#xff0c;与常见的…

detectron2使用总结 |使用detectron2构造 Faster RCNN 和 Mask RCNN 进行目标检测

模型的初始化 detectron2中模型的结构由 cfg 参数决定&#xff0c;而 cfg 的内容来自 configs 中的配置文件。 cfg.merge_from_file(model_zoo.get_config_file("COCO-Detection/faster_rcnn_R_50_FPN_1x.yaml"))meta_arch cfg.MODEL.META_ARCHITECTURE 得到的是一…