TensorRT及CUDA自学笔记003 CUDA编程模型、CUDA线程模型及其管理、CUDA内存模型及其管理

TensorRT及CUDA自学笔记003 CUDA编程模型、CUDA线程模型及其管理、CUDA内存模型及其管理

各位大佬,这是我的自学笔记,如有错误请指正,也欢迎在评论区学习交流,谢谢!

CUDA编程模型

在这里插入图片描述
我们使用CUDA_C语言进行CUDA编程,
1,CUDA编程模型提供了线程抽象接口用于控制GPU中的线程
2,CUDA编程模型提供了内存访问控制,我们可以实现主机和GPU设备内存的控制,我们可以实现CPU和GPU之间内存的数据传递。
3,CUDA编程模型提供了内核函数,进行并行运算时,就是由GPU协调处理线程指向并行运算多个内核函数。

CUDA线程模型

线程模型结构

从逻辑层面讲,CPU内线程可以被划分为grid(网格)和block(块)。
在这里插入图片描述
每一个内核执行,就会产生一个与之对应的grid运行。
grid和block都是多维的。它们最多可以是三维的。

线程管理

  1. 每一个线程具有blockIdx和threadIdx唯一标识。blockIdx和threadIdx是三维的,通过x、y和z访问。
  2. 线程模型维度通过blockDim和gridDim标识。它们一样是三维的,一样通过x、y和z访问。
  3. 线程ID(thread ID)用于标识线程在block中的相对位置的标识,和可以由线程标识和blockDim计算出来,如果block维度为(Dx,Dy)线程标识为(i,j)那么thread ID=(i+j*Dx)
    在这里插入图片描述
    上图中的thread ID 以此为 0 ,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15。

内存模型

在这里插入图片描述
shared memory(共享内存)
共享内存被同一个block中的所有线程所共享,它是一种片上存储空间,具有低延迟和高带宽的特点。
内核函数中使用__shared__修饰的变量保存在shared memory中。
register(寄存器)
每个线程独有一个register,其他线程不能访问。
它是访问速度最快的内存,内核函数代码中没有任何其他修饰符的自动变量存放在register中,以此加快运行速度。
local memory(本地内存)
每个线程独有一个local memory,其他线程不能访问。
其速度略慢于register。
内核函数中无法放在register中的变量会存放在local memory中,如无法确定下标的数值,较大的数据结构等。
constant memory(常量内存)
全局内存用于host和所有的thread都可以访问到global memory。
内核函数中使用__constant__修饰的变量存储在constant memory中。
global memory(全局内存)
全局内存用于host和所有的thread都可以访问到global memory。
在CUDA编程中,它是内存数量最大、使用最多、延迟最大的内存
静态分配时,使用__device__关键字修饰,动态分配时,在主机中使用内存管理函数。
其适用于主机和device的大量数据交互。

内存管理

内存管理的API接口
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

备战蓝桥杯---基础算法刷题2

题目有一点水&#xff0c;不过还是有几个好题的&#xff0c;我在这分享一下&#xff1a; 很容易想到先往最高处跳再往最低处跳&#xff0c;依次类推&#xff0c;那怎么保证其正确性呢&#xff1f; 证法1. 在此&#xff0c;我们从0开始&#xff0c;假设可以跳到a,b,c(a<b<…

js之事件代理/事件委托

事件代理也叫事件委托&#xff0c;原理&#xff1a;利用DOM元素的事件冒泡&#xff0c;指定一个事件的处理程序就可以管理某一类型的所有事件。 事件冒泡和事件捕获 如上图所示&#xff0c;事件传播分成三个阶段&#xff1a; 捕获阶段&#xff1a;从window对象传导到目标节点&…

即时设计和Axure对比,哪一个好用?

无论是国外页面设计工具&#xff0c;页面设计工具的发展从来没有停滞过&#xff0c; Axure&#xff0c;无论是国产设计工具即时设计&#xff0c;其功能都在不断更新迭代&#xff0c;为设计带来更高效的设计体验。今天对比两个设计工具&#xff0c;帮你找到最适合自己的&#xf…

C#与VisionPro联合开发——串口通信

串口通信 串口通信是一种常见的数据传输方式&#xff0c;通过串行接口&#xff08;串口&#xff09;将数据以串行比特流的形式进行传输。在计算机和外部设备之间&#xff0c;串口通信通常是通过串行通信标准&#xff08;如RS-232&#xff09;来实现的。串口通信可以用于连接各…

在Ubuntu中使用python

目录 一、利用vim使用python 1、下载vim 2、使用vim创建python文件 3、编辑完成后的vim操作 4、如何运行 5、vim常见操作 二、安装Jupyter 1、更新系统 2、安装pip 注&#xff1a;pip无法应用的原因及解决方案 3、安装Jupyter 4、打开Jupyter 三、安装其他Python模…

如何食用Kaggle的Course中的exercise?

前言 读完本文只需要几分钟&#xff0c;读完后你将知道&#xff1a; 如何连接kaggle的反馈系统如何检查代码正确性如何查看提示如何查看答案。 关于Setup 通常最上面的会有一块代码&#xff0c;它的功能是连接kaggle的反馈系统&#xff0c;这样才能执行能够提供反馈的代码。…

离散数学(一) 集合

属于关系 表示 枚举法&#xff1b; 叙述法&#xff1b; 文氏图法 基数 空集 全集 全集是相对唯一的 相等关系 有相同元素看作一个元素 包含关系 幂集 集合运算 并集 交集 补集 差集 对称差集 定理 可数集合与不可数集合 自然数集 等势 如果存在集合A到集合B的双射(又称一一…

kafka为什么性能这么高?

Kafka系统架构 Kafka是一个分布式流处理平台&#xff0c;具有高性能和可伸缩性的特点。它使用了一些关键的设计原则和技术&#xff0c;以实现其高性能。 上图是Kafka的架构图&#xff0c;Producer生产消息&#xff0c;以Partition的维度&#xff0c;按照一定的路由策略&#x…

JavaSE-05笔记【面向对象02】

文章目录 1. 类之间的关系2. is-a、is-like-a、has-a2.1 is-a2.2 is-like-a2.3 has-a 3. Object类3.1 toString()3.2 finalize()&#xff08;了解即可&#xff09;3.3 与 equals 方法 4. package 和 import4.1 package4.2 import4.3 JDK 常用开发包 5. 访问权限控制5.1 privat…

AutoHotKey 双击Ctrl 打开指定程序、网页

一、AutoHotKey 下载 CSDN 下载链接&#xff1a;AutoHotKey V2.0.11 二、编写脚本 新建一个txt文本, 如&#xff1a;myHotKey.txt; 支持中文名称、目录; 修改文件扩展名为 ".ahk"; 右击文件&#xff0c;开始编辑文件&#xff1a; 编写、复制以下代码&#xff0c…

C++标准库与Boost库:功能丰富的开发工具集

C标准库与Boost库&#xff1a;功能丰富的开发工具集 C是一种强大的编程语言&#xff0c;而C标准库和Boost库则为C开发者提供了广泛的工具和功能。本文将深入探讨C标准库和Boost库&#xff0c;介绍它们的特点、提供的功能以及如何在项目中使用它们来加速开发过程和提高代码质量。…

【C++】类与对象—— 初始化列表 、static 静态成员、

类与对象 1 再谈构造函数1.1 构造函数体赋值1.2 初始化列表语法&#xff1a;建议&#xff1a;初始化顺序&#xff1a;注意&#xff1a; 1.3 explicit关键字 2 static 静态成员2.1 概念2.2 声明成员变量2.3 使用类的静态成员2.4 定义静态成员总结 Thanks♪(&#xff65;ω&#…

防御保护——笔记(8-11)

内容安全 攻击可能只是一个点&#xff0c;防御需要全方面进行 IAE引擎 DFI和DPI技术--- 深度检测技术 DPI --- 深度包检测技术--- 主要针对完整的数据包&#xff08;数据包分片&#xff0c;分段需要重组&#xff09;&#xff0c;之后对数据包的内容进行识别。&#xff08;应用层…

【Flink精讲】Flink组件通信

主要指三个进程中的通讯 CliFrontendYarnJobClusterEntrypointTaskExecutorRunner Flink内部节点之间的通讯使用Akka&#xff0c;比如JobManager和TaskManager之间。而operator之间的数据传输是利用Netty。 RPC是统称&#xff0c;Akka&#xff0c;Netty是实现 Akka与Ac…

STL用法

参考原文&#xff1a;C中STL用法超详细总结&#xff08;收藏级&#xff09; - 知乎 1 什么是STL&#xff1f; STL&#xff08;Standard Template Library&#xff09;&#xff0c;即标准模板库&#xff0c;是一个具有工业强度的&#xff0c;高效的C程序库。它被容纳于C标准程…

【紫光同创国产FPGA教程】——(盘古EU22K开发板/PGL22G第四章)数字时钟实验例程

本原创教程由深圳市小眼睛科技有限公司创作&#xff0c;版权归本公司所有&#xff0c;如需转载&#xff0c;需授权并注明出处&#xff08;www.meyesemi.com) 适用于板卡型号&#xff1a; 紫光同创PGL22G开发平台&#xff08;盘古EU 22K&#xff09; 仅需一根TypcC线&#xff0…

【牛牛送书 | 第四期】《高效使用Redis:一书学透数据存储与高可用集群》带你快速学习使用Redis

前言&#xff1a; 当今互联网技术日新月异&#xff0c;随着数据量的爆炸式增长&#xff0c;如何高效地存储和管理数据成为了每个公司都必须面对的挑战。与此同时&#xff0c;用户对于应用程序的响应速度和稳定性要求也越来越高。在这个背景下&#xff0c;Redis 作为一个…

消息中间件篇之RabbitMQ-消息不丢失

一、生产者确认机制 RabbitMQ提供了publisher confirm机制来避免消息发送到MQ过程中丢失。消息发送到MQ以后&#xff0c;会返回一个结果给发送者&#xff0c;表示消息是否处理成功。 当消息没有到交换机就失败了&#xff0c;就会返回publish-confirm。当消息没有到达MQ时&…

Vue3 学习笔记(Day4)

「写在前面」 本文为尚硅谷禹神 Vue3 教程的学习笔记。本着自己学习、分享他人的态度&#xff0c;分享学习笔记&#xff0c;希望能对大家有所帮助。推荐先按顺序阅读往期内容&#xff1a; 1. Vue3 学习笔记&#xff08;Day1&#xff09; 2. Vue3 学习笔记&#xff08;Day2&…

在项目中使用CancelToken选择性取消Axios请求

Axios 提供了 CancelToken 类来创建取消标记。取消标记实际上是一个包含 token 标记和 cancel 方法的对象。 1、基本使用方法 const CancelToken axios.CancelToken; const source CancelToken.source();axios.get(/user/12345, {cancelToken: source.token }).catch(functi…