CUDA线程层次一文搞懂|参加CUDA线上训练营
设备术语
- Host:CPU 和 内存 (host memory)
- Device:GPU 和显存 (device memory)
CUDA 线程层次
CUDA 线程层次分为:
- Thread
- 所有线程执行相同的核函数
- 并行执行
- Thread Block
- 执行在一个 Streaming Multiprocessor (SM)
- 同一个 Block 中的线程可以协作
- Thread Grid
- 一个 Grid当中的 Block 可以在多个 SM 中执行
CUDA执行顺序
- 加载核函数
- 将 Grid 分配到一个 Device
- 根据
<<<..>>>
内的执行设置的第一个参数,Giga threads engine 将 block 分配到 SM 中。一个 Block 内的线程一定会在同一个 SM 内,一个 SM 可以有很多个 Block - 根据
<<<..>>>
内的执行设置的第二个参数,Warp 调度器会将调用线程 - Warp 调度器为了提高运行效率,会将每 32 个线程分为一组,称作-个 warp
- 每个 warp 会被分配到 32 个 core 上运行
CUDA 的一切精髓就是并行加速冲冲冲!
如何计算索引
首先来看看基本概念:
-
threadIdx.[x y z]
是执行当前kernel函数的线程在block中的索引值(threadIdx.x是1,threadIdx.y是0) -
blockIdx.[x y z]
是指执行当前kernel函数的线程所在block,在grid中的索引值(blockIdx.x是1,blockIdx.y是1) -
blockDim.[x y z]
表示一个block中包含多少个线程(blockDim.x是5,blockDim.y是3) -
gridDim.[x y z]
表示一个grid中包含多少个block(gridDim.x是3,gridDim.y是2)
计算矩阵运算的时候,将矩阵中的一行取出来,但是因为 CUDA 是多个线程并行的,就是每个线程里面都会同时获取到矩阵行中的某个元素,我们就需要在核函数里面计算出来这个元素在原来矩阵行中的索引,下面是个例子:
Demo
接下来,我们通过完成一个向量加法的实例来实践一下: 。
为了完成这个程序,我们先要将数据传输给GPU,并在GPU完成计算的时候,将数据从GPU中传输给CPU内存。这时我们就需要考虑如何申请GPU存储单元,以及内存和显存之前的数据传输。
我们利用cudaMalloc()来进行GPU存储单元的申请,利用cudaMemcpy()来完成数据的传输
代码如下:
#include <math.h>
#include <stdio.h>void __global__ add(const double *x, const double *y, double *z, int count)
{const int n = blockDim.x * blockIdx.x + threadIdx.x;if( n < count){z[n] = x[n] + y[n];}}
void check(const double *z, const int N)
{bool error = false;for (int n = 0; n < N; ++n){if (fabs(z[n] - 3) > (1.0e-10)){error = true;}}printf("%s\n", error ? "Errors" : "Pass");
}int main(void)
{const int N = 1000;const int M = sizeof(double) * N;double *h_x = (double*) malloc(M);double *h_y = (double*) malloc(M);double *h_z = (double*) malloc(M);for (int n = 0; n < N; ++n){h_x[n] = 1;h_y[n] = 2;}double *d_x, *d_y, *d_z;cudaMalloc((void **)&d_x, M);cudaMalloc((void **)&d_y, M);cudaMalloc((void **)&d_z, M);cudaMemcpy(d_x, h_x, M, cudaMemcpyHostToDevice);cudaMemcpy(d_y, h_y, M, cudaMemcpyHostToDevice);const int block_size = 128;const int grid_size = (N + block_size - 1) / block_size;add<<<grid_size, block_size>>>(d_x, d_y, d_z, N);cudaMemcpy(h_z, d_z, M, cudaMemcpyDeviceToHost);check(h_z, N);free(h_x);free(h_y);free(h_z);cudaFree(d_x);cudaFree(d_y);cudaFree(d_z);return 0;
}
相关文章:
![](https://img-blog.csdnimg.cn/052e376c4036464ba68dc3a747d53d71.png#pic_center)
CUDA线程层次一文搞懂|参加CUDA线上训练营
设备术语 Host:CPU 和 内存 (host memory)Device:GPU 和显存 (device memory) CUDA 线程层次 CUDA 线程层次分为: Thread 所有线程执行相同的核函数并行执行 Thread Block 执行在一个 Streaming Multiprocessor (SM)…...
![](https://img-blog.csdnimg.cn/96b18835bd474b1b8900c55ef753d186.png)
Linux文件默认权限:umask
umask就是指定目前用户在建立文件或目录时候的权限默认值 查看方式有两种:一种可以直接输入umask,就可以看到数字类型的权限设置值,一种则是加入umask后加入-S(Symbolic)选项,就会以符号类型的方式来显示出…...
![](https://hnxx.oss-cn-shanghai.aliyuncs.com/official/1673487401625.png?t=0.37365235739630287)
SonicWall:请立即修复SMA 1000 漏洞
近日,网络安全供应商SonicWall发布了关于安全移动访问 (SMA) 1000设备的三个安全漏洞的紧急报告,其中包括一个高威胁性的身份验证绕过漏洞。SonicWall指出,攻击者可以利用这些漏洞绕过授权,并可能破坏易受攻击的设备。 从报告中可…...
![](https://img-blog.csdnimg.cn/4e50b672f89c4abcb7168e94600a63c3.gif#pic_center)
基于VS调试分析 + 堆栈观察问题代码段
文章目录问题代码段1 —— 阶乘之和问题代码段2 —— 越界的危害① 发现问题② 分析问题③ 思考问题【⭐堆栈原理⭐】④ 解决问题【DeBug与Release】👨程序员与测试人员👩✒总结与提炼问题代码段1 —— 阶乘之和 先来看一道C语言中比较基础的题目&#x…...
![](https://img-blog.csdnimg.cn/img_convert/64d96c48198f3fcb648f3cba574ded1c.png)
QFramework框架学习
主要学习内容TypeEventSystemActionKitTimer类1、TypeEventSystem-适用于一个条件触发,多个组件响应的情况例如:动物园系统中,点击肉食动物按钮,动物园中有肉食属性的动物都进行显示。步骤:1、动物自身脚本上进行判断是…...
![](https://www.ngui.cc/images/no-images.jpg)
移动OA系统,联动企业协作让办公高效无间断
移动oa系统,近年来随着企业办公节奏的变化及人们个性化办公需求的增加迎来了快速发展。一方面,它兼具OA系统诸多优势,既凝聚了企业基础管理工作,联动了企业协作、沟通交流,又进一步提高了企业的综合实力与市场竞争力。…...
![](https://img-blog.csdnimg.cn/52a8fbe53d2445edb8c8ce73b256ae3e.gif#pic_center)
结构体熟练掌握--实现通讯录
魔王的介绍:😶🌫️一名双非本科大一小白。魔王的目标:🤯努力赶上周围卷王的脚步。魔王的主页:🔥🔥🔥大魔王.🔥🔥🔥 ❤️…...
![](https://www.ngui.cc/images/no-images.jpg)
腾讯云CVM服务器购买流程手把手方法教程攻略
购买腾讯云服务器有两种方式。一种是在官方活动中,简单方便,但ECS配置相对固定;另一种是在ECS页面定制购买。配置选项丰富,但地理可用性区域、计费模式、CPU内存实例规格、映像系统、存储系统磁盘、网络带宽和安全组的选择更为复…...
![](https://img-blog.csdnimg.cn/92e79f9650ee44cb8816be57f8ddc460.jpeg)
九龙证券|“春季躁动”行情要来?1月新增投资者数大增
新增投资者数量在上一年12月触及多年新低后,2023年1月份开端呈现反弹。 在新增投资者数量之外,近段时刻以来,包含A股商场股票成交额、北向资金净买入额、两融资金规划及成交额在内多个商场目标也呈现回暖的特征,目前A股商场交投氛…...
![](https://img-blog.csdnimg.cn/240e3dc1e2d2418d9a4af9c67a251314.gif)
C语言(按位运算符和位移运算符)
目录 编辑 一.按位运算符 1.二进制反码或按位取反:~ 2.按位与:& 3.按位或:| 4.按位异或:^ 二.位移运算符 1.左移: << 2.右移: >> 一.按位运算符 C有四个按位逻辑运算符都用于整…...
![](https://www.ngui.cc/images/no-images.jpg)
删掉的照片怎么恢复?
每一张照片都是生活,留住每一个人的回忆。而这些有意义的照片,我们都会把它保存在我们的手机或电脑上,始终伴随着我们。但无论是手机还是电脑,都是需要时不时清理一下的。如果是清理垃圾图片时,不小心删除了需要的图片…...
![](https://img-blog.csdnimg.cn/1c588c273faa44d082f9bc8249195078.png)
【java】40 个 SpringBoot 常用注解(建议收藏)
本文目录一、Spring Web MVC 注解Spring Web MVC 注解RequestMappingRequestBodyGetMappingPostMappingPutMappingDeleteMappingPatchMappingControllerAdviceResponseBodyExceptionHandlerResponseStatusPathVariableRequestParamControllerRestControllerModelAttributeCross…...
![](https://img-blog.csdnimg.cn/img_convert/22e65f32bd732f39424a98317e2c760c.webp?x-oss-process=image/format,png)
【JMC】SMILES‑based deep generative scafold decorator for de‑novo drug design
SMILES-based deep generative scaffold decorator for de-novo drug design 基于SMILES的利用Fragment的分子生成模型 https://github.com/undeadpixel/reinvent-scaffold-decorator 1.背景 深度生成模型因其可以从有限的数量中生成新数据,目前已成功应用于生成…...
![](https://img-blog.csdnimg.cn/e101349a9cdf47ddbd22cb6f2863e733.png)
全链路异步,让你的 SpringCloud 性能优化10倍+
背景 随着业务的发展,微服务应用的流量越来越大,使用到的资源也越来越多。 在微服务架构下,大量的应用都是 SpringCloud 分布式架构,这种架构,总体是全链路同步模式。 同步编程模式不仅造成了资源的极大浪费&#x…...
![](https://www.ngui.cc/images/no-images.jpg)
131.《router v 5 与 react-router v 6》
文章目录1.什么是路由2.路由分类3.react-router-dom的理解4. react-router-dom相关API5.其他6. react-router5 路由基本使用1.效果2.代码App.js一级路由home.js下的二级路由7.路由传参的三种方式8.react-router6 基本使用1.一级路由2.二级路由3.hooksuseRoutesuseParamsuseSear…...
![](https://www.ngui.cc/images/no-images.jpg)
2023第十届北京老年产业博览会/中国养老护理人才培育计划
CBIAIE北京老博会,打造2023年度唯具参展价值的老年行业盛会; 北京老博会:2011年,我国首场以“老年产业”为主题,一场专注于老年福祉、健康的国际型行业发展盛会,中国(北京)国际老年…...
![](https://img-blog.csdnimg.cn/img_convert/73db8154c6f2814ec1678e7f2c7c8a5e.png)
STM32F407VET6 / BLACK_F407VE开发板间隔0.5秒不断重启
有一块 STM32F407VET6 的故障开发板, 之前的问题是经常无法烧录, 必须reset之后才能连接, 具体查看这篇 STM32F407VET6烧录出现flash download failed target dll has been cancelled. 并且程序运行一段时间后会halt. 这块开发板后来一直搁箱底吃灰了几年. 最近打算把这片 STM…...
![](https://www.ngui.cc/images/no-images.jpg)
什么是圈复杂度
圈复杂度是一种软件度量指标,用于度量程序中的控制流程的复杂性。它是通过计算程序中独立路径的数量来确定的。简单来说,圈复杂度是指在一个函数或模块中有多少个独立的路径,也就是说,有多少个不同的输入序列可以导致不同的执行路…...
![](https://img-blog.csdnimg.cn/ed9aae02332a4a6b97079b2a1916c72f.png)
Hbase 数据迁移
Hbase 数据迁移 可选方案对比 l 已验证方案操作说明: n Export&import u 导出命令及示例 hbase org.apache.hadoop.hbase.mapreduce.Export “表名” 文件路径 导出至本地文件系统: ./bin/hbase org.apache.hadoop.hbase.mapreduce.Export ‘defa…...
![](https://img-blog.csdnimg.cn/img_convert/42ffb2fd63316c3bc2ffcb3ec9ce33dc.png)
Docker consul的容器服务更新与发现
一、Consul概述(1)什么是服务注册与发现服务注册与发现是微服务架构中不可或缺的重要组件。起初服务都是单节点的,不保障高可用性,也不考虑服务的压力承载,服务之间调用单纯的通过接口访问。直到后来出现了多个节点的分…...
![](https://img-blog.csdnimg.cn/7e399182d6234b6e83a8851d22c6ddd2.png)
数据库关系模型
关系模型简述 形象地说,一个关系就是一个table。 关系模型就是处理table的,它由三个部分组成: 描述DB各种数据的基本结构形式;描述table与table之间所可能发生的各种操作;描述这些操作所应遵循的约束条件࿱…...
![](https://img-blog.csdnimg.cn/ca81363a8679412f92bc5fdc8f06ea3a.png)
你是真的“C”——详解指针知识
你是真的“C”——详解指针知识😎前言🙌1、 指针是什么?🙌2、指针和指针类型🙌2 、1指针-整数2 、 2指针的解引用3、 野指针🙌3、 1野指针成因3、 2如何规避野指针4、指针运算🙌4、1 指针-整数4…...
![](https://www.ngui.cc/images/no-images.jpg)
React/ReactNative面试攻略(偏RN)
useMemo Vs useCallBackuseMemo第一个参数返回的是值,useCallBack返回的是函数useMemo和useCallBack第二个参数都是依赖项useMemo避免组件非依赖项更新时参数的计算useCallback避免父组件非依赖项更新时造成子组件的重复渲染React.memo 使用场景纯prue组件ÿ…...
![](https://img-blog.csdnimg.cn/1ad666cca0ad430a89dee4b4f552b889.png)
Leetcode-每日一题1234. 替换子串得到平衡字符串(滑动窗口 + 哈希表)
题目链接:https://leetcode.cn/problems/replace-the-substring-for-balanced-string/description/ 思路 题目意思 这题意思是一个只含有[Q, W, E, R] 四个字符的字符串s且长度一定是 4的倍数, 需要你通过替换子串,使他变成一个「平衡字符…...
![](https://www.ngui.cc/images/no-images.jpg)
linux命令小结-查看日志命令
一、查看日志命令cat查看文件 vi编辑后可以用cat进行查看保存是否成功1)cat -n alert_monitor.log2)cat -n alert_monitor.log | tail -n 100 | head -n 20 //查询100行之后的日志,且在100行之后里再查前20条日志more 可以通过回撤键翻页mor…...
![](https://img-blog.csdnimg.cn/24d08b9ba75b4f03a2069387763fdb75.png)
Java知识点细节简易汇总——(8)枚举和注解+Java面向对象高级作业
一、枚举 自定义枚举 当我们使用 enum 关键字开发一个枚举类时,默认会继承 Enum 类, 而且是一个 final 类[如何证明],老师使用 javap 工具来演示传统的 public static final Season2 SPRING new Season2(“春天”, “温暖”); 简化成 SPRING(“春天”, “温暖”)…...
![](https://www.ngui.cc/images/no-images.jpg)
快速上手JVM- Java Virtual Machine面试不用慌
一、JVM的定义 JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。 引入Java语言虚拟机后,J…...
![](https://img-blog.csdnimg.cn/904b33fea0a74e65a173d046a3b08459.jpeg)
安警官的IP地址是怎样定位到莽村附近的?
要说最近大火的电视剧非《狂飙》莫属。电视剧《狂飙》自开播以来,一举超过《三体》《去有风的地方》等先播电视剧,收视率一路“狂飙”,牢牢占据近期的收视冠军。 在剧中,张译扮演一名坚持公平、正义与理想的人民警察“安欣”&…...
![](https://img-blog.csdnimg.cn/img_convert/a8aa938f45d64327eee4a94f42c64d6a.jpeg)
STL中重要容器vector总结
你要尽全力保护你的梦想。那些嘲笑你的人,他们必定会失败,他们想把你变成和他们一样的人。如果你有梦想的话,就要努力去实现。 ——《当幸福来敲门》引言:C中STL里面的容器用法很巧妙,可以解决很多复杂的模型ÿ…...
![](https://img-blog.csdnimg.cn/06b5117bb9234dac99b96268fa6a8f1f.png)
11_会话原理与实现流程
1、会话的基本知识 # 会话## 1.会话是什么?客户端与服务器之间的对话交流## 2.为什么需要会话?-http 协议是无状态的(六亲不认)-同一用户多次访问同一网站,对网站来说,每次都是全新的-网站不能识别用户身份…...
![](https://img-blog.csdnimg.cn/img_convert/160aa5f671410fc330ef22e661d61a94.png)
门户网站建设注意事项/国内ip地址 免费
一、背景 公司的项目前段时间发版上线后,测试反馈用户的批量删除功能报错。正常情况下看起来应该是个小BUG,可怪就怪在上个版本正常,且此次发版未涉及用户功能的改动。因为这个看似小BUG我了解到不少未知的东西,在这里和你们分享下…...
![](https://images2017.cnblogs.com/blog/793034/201801/793034-20180122174826022-1145524321.jpg)
wordpress 登录后查看/网站关键词优化wang
一、控制面板中安装Telnet相关组件 单击“开始”菜单,单击“控制面板”在控制面板中单击打开“程序和功能”项目在左侧的蓝色区域界面单击“打开或关闭 Windows 功能”弹出“Windows 功能”对话框,在列表中勾选“Telnet客户端”,单击“确定”…...
![](https://s1.51cto.com/attachment/201101/20/733218_12955025165kt0.jpg)
如何制作自己的个人网站/百度信息
软件名:MKVToolnix 版本号:V4.4.0 简介:MKVToolnix是开源软件,可将目前主流音视频封装为MKV格式。对于喜欢体味原汁原味的同志们,可以使用这款软件,将字幕和语言默认设为英文,不用每次看时手动设…...
![](/images/no-images.jpg)
新网网站模板/seo挂机赚钱
进程和线程的结束 在执行体层,线程的终止函数是NtTerminateThread,内部调用PspTerminateThreadByPointer完成终止处理。系统线程的终止函数是PsTerminateSystemThread,内部调用 PspTerminateThreadByPointer完成终止处理。 三个函数原型如下: NTSTAT…...
![](/images/no-images.jpg)
wordpress注册没有密码/760关键词排名查询
项目接口文档管理之swagger-ui 首先引入swagger-ui的包文件其次是wagger的配置类第三是自定义接口说明第四是启动测试swagger2的常用注解说明@Api@ApiOperation@ApiImplicitParams@ApiModel@ApiResponses@ApiParam首先引入swagger-ui的包文件 <dependency><groupId...
清远专业网站建设/一个新品牌怎样营销推广
我经常听到年轻人有这样的抱怨:“不满意自己现在的状态,迷茫、焦虑,怕被淘汰却又不知道该学点什么...”我特别能理解这种无力感:日常琐碎的工作,让年轻人没时间成长,偶尔抽出时间,也是在进行碎片…...