CUDA执行模型2

资源分配

线程束的本地执行上下文主要由以下资源组成:

  • 程序计数器
  • 寄存器
  • 共享内存

由SM处理的每个线程束的执行上下文,在整个线程束的生存期中是保存在芯片内的。

SM的关键组件:

  • CUDA核心
  • 共享内存/一级缓存
  • 寄存器文件
  • 加载/存储单元
  • 特殊功能单元
  • 线程束调度器

每个SM都有32位的寄存器组,存储在寄存器文件中,在线程中进行分配。

SM(Streaming Multiprocessor,流多处理器)寄存器是指用于存储线程的状态和临时数据的存储器单元。每个线程在执行时都会被分配一定数量的寄存器,用于存储其局部变量、中间计算结果等。这些寄存器是线程私有的,不同线程之间不能直接访问对方的寄存器。

SM寄存器的作用包括但不限于以下几点:

  1. 存储线程状态:每个线程在执行时需要保存一些状态信息,如程序计数器、栈指针等,这些状态信息存储在寄存器中。

  2. 存储局部变量:线程执行过程中使用的局部变量和临时变量都存储在寄存器中。由于寄存器的读写速度非常快,因此可以提高程序的执行效率。

  3. 存储中间计算结果:在执行复杂计算过程中,线程可能需要存储一些中间计算结果,这些结果也存储在寄存器中,以便后续使用。

  4. 存储函数调用相关信息:如果线程调用了函数,那么函数调用相关的信息,如参数、返回地址等也会存储在寄存器中。

每个线程消耗的寄存器越多,一个SM上可以处理的线程束越少;每个线程块使用的共享内存越多,一个SM上可以处理的线程块越少。

资源可用性会限制SM中常驻线程块的数量,如果每个SM中没有足够的寄存器或共享内存处理至少一个线程块,那么内核将无法启动。

一旦计算资源被分配给线程块,该线程块被称为活跃的块。它所包含的线程束被称为活跃的线程束。活跃的线程束可以被细分为以下三种:

  • 选定的线程束
  • 阻塞的线程束
  • 符合条件的线程束

一个SM上的线程束调度器在每个周期都选择活跃的线程束,然后将它们调度到执行单元。活跃执行的线程束被称为选定的线程束。如果一个活跃的线程束准备执行但尚未执行,则是一个符合条件的线程束,没有做好准备的线程束是阻塞的线程束。

计算资源限制了活跃的线程束的数量。因此必须了解由硬件产生的限制和内核用到的资源。为了最大程度的利用GPU,需要最大化活跃的线程束数量。

延迟隐藏

SM在指令发出和完成之间的时钟周期被定义为指令延迟。当每个时钟周期中所有的线程调度器都有一个符合条件的线程时,可以达到计算资源的完全利用。

考虑到指令迟延,GPU的指令和对应的延迟可以被分为两种类型:

  • 算数指令        10~20个周期
  • 内存指令        400~800个周期

如何估算隐藏延迟所需要的活跃线程束数量,使用利特尔法则。

所需线程束数量 = 延迟 * 吞吐量

带宽与吞吐量:带宽指理论峰值,吞吐量指已到达的值。

所谓延迟隐藏,其实不是将延迟“消失”,而是在大规模的并行中,在某个或某些线程发生延迟时,比如在某个线程读取内存时,在这段计算周期中进行其他可行的线程计算或其他处理。将线程的延迟“隐藏”起来。

同步

CUDA中,同步可以在两个不同的级别执行:

  • 系统级:等待主机或设备完成所有工作
  • 块级:在设备执行过程中,等待一个线程块中的所有线程到达同一点。

对于主机来说,许多CUDA API调用和所有的内核启动不是同步的,以下这个函数可以用来阻塞主机程序,直到完成所有的CUDA操作

cudaError_t cudaDeviceSynchronize(void);

这个函数可能会从先前的先前的CUDA异步操作返回错误。

GPT的解释:

cudaDeviceSynchronize函数可能从先前的异步CUDA操作返回错误的原因通常与异步操作的执行有关。在CUDA编程中,很多操作都可以以异步方式执行,例如内存拷贝、核函数启动等。当使用异步操作时,操作并不会立即执行,而是会在后台等待GPU资源可用时才会执行。

如果在调用cudaDeviceSynchronize之前有未完成的异步操作,那么这些操作可能会在cudaDeviceSynchronize中执行时引发错误。例如,如果在调用cudaMemcpyAsync拷贝数据之后立即调用cudaDeviceSynchronize,但数据拷贝操作尚未完成,那么cudaDeviceSynchronize可能会返回错误,因为它等待的操作尚未完成。

因为在一个线程块中的线程束以一个未定义的顺序执行,CUDA提供了一个使用块局部栅栏来同步它们的执行的功能。

__device__ void __syncthreads(void);

在该函数被调用时,在同一个线程块中的所有线程都必须等待直至线程块中的所有其他线程都到达这个同步点。

在不同的块之间没有线程同步。块间同步,唯一安全的方法是在每个内核执行结束端使用全局同步点;也就是说,在全局同步后,终止当前的核函数,开始执行新的核函数。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Innodb底层原理与Mysql日志机制到底怎么个事???

在学完Innodb底层原理与Mysql日志机制,自己进行总结,画了一张脑图,思路清晰许多 希望对大家也能有点帮助

Visual Studio Code基础:打开一个编辑器(文件)时,覆盖了原编辑器

相关阅读 VS codehttps://blog.csdn.net/weixin_45791458/category_12658212.html?spm1001.2014.3001.5482 在使用vscode时,偶尔会出现这样的问题:打开了某个编辑器(文件,下面统称文件)后,再打开其他文件…

安装JAVA和java IDEA并汉化过程

1.安装java: 打开java的下载链接: Java Downloads | Oracle 然后选择对应的版本下载即可,我这里是windows 所以下载这个 然后正常一步步安装即可。 2.配置java环境: 在桌面右键此电脑然后点击属性——高级系统设置——环境变量——然后…

ACE框架学习3

ACE Acceptor-Connector框架 该框架实现 Acceptor-Connector 模式,该模式解除了“网络化应用中的协作对端服务的连接和初始化”与“连接和初始化之后它们所执行的处理”的耦合。Acceptor-Connector 框架允许成用独立于它们所提供的服务来配置其连接布局的关键属性。…

【万字长文】看完这篇yolov4详解,那算是真会了

前言 目标检测作为计算机视觉领域的一个核心任务,其目的是识别出图像中所有感兴趣的目标,并给出它们的类别和位置。YOLO(You Only Look Once)系列模型因其检测速度快、性能优异而成为该领域的明星。随着YOLOv4的推出,…

网络安全的防护措施有哪些?

1. 安全策略和合规性 2. 物理和网络安全 3. 数据加密 4. 软件和系统更新 5. 访问控制 6. 威胁监测和响应 7. 员工培训和安全意识 8. 备份和灾难恢复 零基础入门学习路线 视频配套资料&国内外网安书籍、文档 网络安全面试题 网络安全的防护措施多种多样&#xff0c…

JVM的垃圾回收机制(GC机制)

在Java代码运行的过程中,JVM发现 某些资源不需要再使用的时候,就会自动把资源所占的内存给回收掉,就不需要程序员自行操作了。“自动回收资源”就是JVM的“垃圾回收机制”,“垃圾回收机制”也称"GC机制"。 对于Java代码…

排序算法(2)快排

交换排序 思想:所谓交换,就是根据序列中两个记录键值的比较结果来对换这两个记录在序列中的位置,交换排序的特点是:将键值较大的记录向序列的尾部移动,键值较小的记录向序列的前部移动。 一、冒泡排序 public static…

Sarcasm detection论文解析 | 通过阅读进行讽刺推理-Reasoning with sarcasm by reading in-between

论文地址 论文地址:[1805.02856] Reasoning with Sarcasm by Reading In-between (arxiv.org) 论文首页 笔记大纲 通过阅读进行讽刺推理论文笔记 📅出版年份:2018📖出版期刊:📈影响因子:🧑文章作者:Tay Yi,Luu Anh…

FIR滤波器——DSP学习笔记三(包含一个滤波器设计的简明案例)

​​​​​​ 背景知识 FIR滤波器的特性与优点 可精确地实现线性相位响应(Linear phase response),无相位失真; 总是稳定的,所有极点都位于原点 线性相位FIR滤波器的性质、类型及零点位置 冲击响应满足:奇…

挺看好的一位实习生,顶峰见!

大家好,我是程序员鱼皮。今天我要分享自己团队里一位全栈实习生的实习总结。 在实习期间,这位同学参与了多个项目的工作,包括企业动态公告系统的开发、企业周边系统的搭建、撰写技术教程、开发 IDEA 插件、构建云端管理平台等等。 实习近 3…

个人学习总结__打开摄像头、播放网络视频的以及ffmpeg推流

前言 最近入手了一款非常便宜的usb摄像头(买回来感觉画质很低,没有描述的4k,不过也够用于学习了),想着利用它来开启流媒体相关技术的学习。第一步便是打开摄像头,从而才能够对它进行一系列后续操作,诸如实…

网动统一通信平台存在任意文件读取漏洞

声明: 本文仅用于技术交流,请勿用于非法用途 由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,文章作者不为此承担任何责任。 简介 网动统一通信平台(ActiveUC&#xff09…

AEMTO--一种自适应进化多任务优化框架

AEMTO–一种自适应进化多任务优化框架 title: Evolutionary Multitask Optimization With Adaptive Knowledge Transfer author: Hao Xu, A. K. Qin, and Siyu Xia. journal: IEEE TRANSACTIONS ON EVOLUTIONARY COMPUTATION (TEVC) DOI&…

基于SpringBoot+Vue校园竞赛管理系统的设计与实现

项目介绍: 传统信息的管理大部分依赖于管理人员的手工登记与管理,然而,随着近些年信息技术的迅猛发展,让许多比较老套的信息管理模式进行了更新迭代,竞赛信息因为其管理内容繁杂,管理数量繁多导致手工进行…

B2B商城系统如何搭建?

相较于单个商家的独立商城,B2B商城系统凭借诸多优势成为电商领域中最受关注的一种模式。目前在政府、金融、汽车、跨境等行业领域都有广泛应用。那么,B2B商城系统如何搭建呢?我们从开发语言、功能模块、优势来进行分析。 一、B2B商城系统开发…

对抗攻击新手实战

实战核心思想: 训练x(输入),让第一次训练好的,正确的y去和我们想要误导机器去识别的类别的那个y做一个损失函数【loss torch.mean(y[:, 248])】,不同的是,我们其实希望是一个梯度上升,给图片加…

31 OpenCV 距离变换和分水岭算法

文章目录 距离变换分水岭算法distanceTransform 距离变换watershed 分水岭算法示例 距离变换 分水岭算法 distanceTransform 距离变换 void cv::distanceTransform (InputArray src,OutputArray dst,int distanceType,int maskSize,int dstType CV_32F) src:输入图像&#xf…

一篇关于Cookie的基础知识

目录 一、现有问题 二、简介 三、Cookie原理 四、Cookie应用 4.1 创建并向客户端发送Cookie 4.2 从客户端读取Cookie 4.3 Cookie的生命周期 4.4 Cookie的编码和解码 4.5 优缺点 五、记录上次登录的时间(案例) 六、Cookie 获取范围有多大&…

Python —— 模块、包

一、模块和包 1. 模块module 模块是 Python 程序架构的一个核心概念。Python中模块就是一个.py文件,模块中可以定义函数,变量,类。模块可以被其他模块引用 1.1. 创建模块文件 创建文件:utils.py # 定义变量 name 张三# 定义函…
最新文章