3.7 THREAD SCHEDULING AND LATENCY TOLERANCE

news2024/9/8 22:58:45

线程调度严格来说是一个实现概念。因此,它必须在特定硬件实现的背景下进行讨论。在迄今为止的大多数实现中,分配给SM的块被进一步分为32个称为warps的线程单元。warps的大小是特定于实现的。warps不是CUDA规范的一部分;然而,了解warps有助于理解和优化特定代CUDA设备上CUDA应用程序的性能。warps的大小是CUDA设备的属性,位于设备查询变量(在本例中为dev_prop)的warpSize字段中。

warp是SM中线程调度的单位。图3.13显示了在实现中将块划分为warp。每个warp经由32个连续的线程ldx值组成:线程0到31形成第一个warp,32到63第二个warp等。在本例中,三个块——第1块、第2块和第3块被分配给一个SM。出于调度目的,这三个区块中的每一个都进一步分为warp。
在这里插入图片描述
我们可以计算给定块大小和分配给每个SM的给定块数的驻留在SM中的warps。在图3.13中,如果每个块有256个线程,我们可以确定每个块有256/32或8个warps。每个SM有三个块,每个SM有8×3=24个warps。

SM旨在按照单指令、多数据(SIMD)模型执行warp中的所有线程,即在任何时候,都会为warp中的所有线程获取并执行一条指令。这种情况如图3.13所示,在SM中的执行单元(SP)之间共享单个指令获取/调度。这些线程将对数据的不同部分应用相同的指令。因此,warp中的所有线程将始终具有相同的执行时间。

图3.13还显示了一些实际执行指令的硬件流处理器(SP)。一般来说,SP比分配给每个SM的线程少;即每个SM只有足够的硬件来执行在任何时间点分配给SM的所有线程的小子集的指令。在早期的GPU设计中,每个SM在任何瞬间只能为单个warp执行一个指令。在最近的设计中,每个SM可以在任何时间点执行少量warp的指令。无论哪种情况,硬件都可以为SM中所有warp的一小部分执行指令。一个合理的问题是,如果一个SM在任何时候都只能执行一小部分,那么为什么我们需要在SM中有这么多的warp。答案是,这就是CUDA处理器如何有效地执行长延迟操作,例如全局内存访问。

当要由warp执行的指令需要等待之前启动的长延迟操作的结果时,不会选择这个warp执行相反,将选择另一个不再等待结果的常驻warp进行执行。如果多个warp已准备好执行,则使用优先级机制来选择一个执行。这种用其他线程的工作填充操作延迟时间的机制通常被称为“延迟容忍度”或“latency隐藏”(见“延迟容忍度”边栏)。

warp调度也用于容忍其他类型的操作延迟,例如管道化的浮点算术和分支指令。给定足够数量的warp,硬件可能会在任何时间点找到要执行的warp,因此尽管有这些长延迟操作,但仍能充分利用执行硬件。选择执行的就绪warp避免了在执行时间线中引入空闲或浪费的时间,这被称为零开销线程调度。通过warp调度,warp指令的长等待时间通过执行其他warp指令被“隐藏”。这种容忍长延迟操作的能力是GPU不像CPU那样将几乎那么多的芯片区域用于缓存存储器和分支预测机制的主要原因。因此,GPU可以将其更多的芯片区域用于浮点执行资源。

延迟容忍
在各种日常情况下也需要延迟容忍。例如,在邮局,每个试图运送包裹的人最好在去服务柜台之前填写所有必要的表格和标签。相反,有些人等待服务台办事员告诉他们要填写哪种表格以及如何填写表格。
当服务台前排长队时,必须最大限度地提高服务人员的生产力。当每个人都在等待时,让一个人在办事员面前填写表格不是一种有效的方法。在人员填写表格时,办事员应该协助排队等候的其他客户。这些其他客户已经“准备就绪”,不应该被需要更多时间填写表格的客户阻止。
因此,一个好的办事员会礼貌地要求第一个客户靠边站来填写表格,同时他/她可以为其他客户服务。在大多数情况下,一旦该客户完成表格,并且办事员完成为当前客户提供服务,而不是该客户到行尾,就会为第一个客户提供服务。
我们可以将这些邮局客户视为warp,将办事员视为硬件执行单元。需要填写表格的客户对应于一个warp,其持续执行取决于长延迟操作。

我们现在准备好进行一个简单的练习了。假设CUDA设备每个SM最多允许8个块和1024个线程,以先成为限制者为准。此外,它允许每个块中多达512个线程。对于图像模糊,我们应该使用8×8、16×16还是32×32线程块?为了回答这个问题,我们可以分析每个选择的利弊。如果我们使用8 x 8块,每个块只有64个线程。我们需要1024/64 = 12个区块才能完全占据一个SM。然而,每个SM最多只能允许8个块;因此,我们最终每个SM中只有64×8=512个线程。这个有限的数量意味着SM执行资源可能没有得到充分利用,因为可以围绕长延迟操作安排的warp更少。

请注意,这是一个过于简化的练习。正如我们将在第4章“内存和数据局部性”中解释的那样,在确定最合适的块尺寸时,还必须考虑寄存器和共享内存等其他资源的使用。本练习强调了块数量限制和可以分配给每个SM的线程数量限制之间的相互作用。

16×16块导致每个块256个线程,这意味着每个SM可以采取1024/256 = 4个块。这个数字在8块限制范围内,是一个很好的配置,因为它将允许我们在每个SM中拥有完整的线程容量,并允许围绕长延迟操作调度最大数量的warp。32 x 32块将在每个块中提供1024个线程,这超过了该设备每个块的512个线程限制。只有16 x 16块允许为每个SM分配最大线程数。Kerel执行配置参数定义了grid及其块的尺寸。blockIdx和threadidx中的唯一坐标允许网格的线程识别自己及其数据域。程序员有责任在内核函数中使用这些变量,以便线程能够正确识别要处理的数据部分。这种编程模式迫使程序员将线程及其数据组织到分层和多维组织中。

一旦启动网格,其块可以按任意顺序分配给SM,从而实现CUDA应用程序的透明可扩展性。透明的可扩展性有一个限制:不同块中的线程不能相互同步。为了使内核保持透明的可扩展性,不同块中的线程相互同步的简单方法是终止内核,并在同步点后为活动启动一个新的内核。

线程被分配给SM,以便逐个块执行。每个CUDA设备对每个SM的可用资源量施加了潜在的不同限制。每个CUDA设备对每个SM可以容纳的块数量和线程数量设置限制,以先成为限制者为准。对于每个内核,其中一个或多个资源限制可以成为同时驻留在CUDA设备中的线程数量的限制因素。

一旦一个块被分配给一个SM,它就会被进一步分割成warp。warp中的所有线程都具有相同的执行时间。在任何时候,SM只执行其常驻warp的一小部分的指令。这个条件允许其他warp等待长延迟操作,而不会减慢大量执行单元的整体执行吞吐量。

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

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

相关文章

python+playwright 学习-1.环境准备与快速开始

前言 说到 web 自动化,大家最熟悉的就是 selenium 了,selenium 之后又出现了三个强势的框架Puppeteer、CyPress、TestCafe, 但这3个都需要掌握 JavaScript 语言,所以只是少部分人在用。 2020年微软开源一个 UI 自动化测试工具 P…

基于供需算法优化的Elman神经网络数据预测 - 附代码

基于供需算法优化的Elman神经网络数据预测 - 附代码 文章目录 基于供需算法优化的Elman神经网络数据预测 - 附代码1.Elman 神经网络结构2.Elman 神经用络学习过程3.电力负荷预测概述3.1 模型建立 4.基于供需优化的Elman网络5.测试结果6.参考文献7.Matlab代码 摘要:针…

scala 安装和创建项目

Scala,一种可随您扩展的编程语言:从小型脚本到大型多平台应用程序。Scala不是Java的扩展,但它完全可以与Java互操作。在编译时,Scala文件将转换为Java字节码并在JVM(Java虚拟机)上运行。Scala被设计成面向对…

[De1ctf 2019]SSRF Me

目录 具体做题分析: 字符串拼接: 哈希拓展攻击: 点开是一段flask代码,经过还原后格式如下: #!/usr/bin/env python# encodingutf-8from flask import Flask, requestimport socketimport hashlibimport urllibimpo…

IDEA无公网环境ssh远程访问本地Linux服务器进行开发

文章目录 1. 检查Linux SSH服务2. 本地连接测试3. Linux 安装Cpolar4. 创建远程连接公网地址5. 公网远程连接测试6. 固定连接公网地址7. 固定地址连接测试 本文主要介绍如何在IDEA中设置远程连接服务器开发环境,并结合Cpolar内网穿透工具实现无公网远程连接&#xf…

P5534 【XR-3】等差数列————C++、C

目录 【XR-3】等差数列题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 样例 #2样例输入 #2样例输出 #2 提示 解题思路Code运行结果 【XR-3】等差数列 题目描述 小 X 给了你一个等差数列的前两项以及项数,请你求出这个等差数列各项之和。 等差数列&#…

深度解析分布式锁及实现方案

😄 19年之后由于某些原因断更了三年,23年重新扬帆起航,推出更多优质博文,希望大家多多支持~ 🌷 古之立大事者,不惟有超世之才,亦必有坚忍不拔之志 🎐 个人CSND主页——Mi…

告别内存容量焦虑,光威龙武系列DDR5内存条48GB才799

新年很多朋友又准备新装机或者升级内存了,我比较推荐直接用DDR5大容量的内容,像是光威龙武系列DDR5内存条性价比就非常高,能够满足专业玩家、创作者和高性能计算机用户的需求。这款涵盖多种存储规格,包括6400MHZ 242和6800MHZ 162…

【Vue3】2-5 : 指令系统与事件方法及传参处理

本书目录:点击进入 一、标签属性中的使用 - 指令系统 1.1 那么模板语法是否可以在标签属性中进行使用呢? ▶ 当然可以:使用 指令系统 二、指令系统 2.1 v-bind 2.2 v-on 三、实战 3.1 methods 选项 3.2 $event语法 一、标签属性中的使用 - 指令…

vue+springboot项目上传部署tomcat

下载及安装Tomcat 进入tomcat官网,Tomcat官网 选择需要下载的版本,点击下载下载路径一定要记住,并且路径中尽量不要有中文 下载后是压缩包 .zip,解压后 tomcat系统各个文件夹目录是什么意义: bin:放置的是…

有趣的前端知识(二)

推荐阅读 智能化校园:深入探讨云端管理系统设计与实现(一) 智能化校园:深入探讨云端管理系统设计与实现(二) 文章目录 推荐阅读HTML元素元素属性头部元素列表元素区块元素表单元素 颜色字符实体 HTML元素 …

即时设计:设计稿与PPT完美结合,让您的创意作品更具影响力

PPT助手 更多内容 在设计领域,将设计稿与PPT结合起来,可以让您的作品更具吸引力和影响力。为了满足这一需求,我们向您推荐一款强大的设计工具,它可以将设计稿导出为PPT文件,支持线上预览和编辑,让您的创意…

Spring学习 Spring AOP

4.Spring AOP 4.1.为什么要学习AOP? 案例:有一个接口Service有一个addUser方法,在调用addUser(被调用时打印调用前的毫秒数与调用后的毫秒数),其实现为: Service public class UserServiceImpl implements UserServi…

环信IM Demo登录方式如何修改为自己项目的?

在环信即时通讯云IM 官网下载Demo,本地运行只有手机验证码的方式登录?怎么更改为自己项目的Appkey和用户去进行登录呢? 👇👇👇本文以Web端为例,教大家如何更改代码来实现 1、 VUE2 Demo vue2…

2023十大最具商业影响力量子公司 | 光子盒年度系列

量子技术以其广泛的应用范围和对多个领域的深远影响,是当之无愧的“通用底座”技术,其潜在的产业变革力正在展现,尽管当前量子技术与人工智能或虚拟现实等技术领域相比,量子对大多数人来说还有些“看不透”。 2023年,量…

C#实现个人账本管理系统

git地址:https://gitee.com/myshort-term/personal-ledger-management-system 1.系统简介 LedgerManagementSystem是一个小型的个人账本管理系统,可对收支项目进行增加、删除、修改、查询以及导入和导出。可对每日的各类收支项目进行汇总并查看和修改收…

作业--day42

界面设计 MyProWin::MyProWin(QWidget *parent): QMainWindow(parent) {/**********窗口主体**********///窗口大小this->setFixedSize(644, 493);this->setWindowTitle("QQ");this->setWindowIcon(QIcon("C:/Users/10988/Downloads/pictrue/pictrue/…

计算机毕业设计 | SpringBoot+vue移动端音乐网站 音乐播放器(附源码)

1,项目背景 随着计算机技术的发展,网络技术对我们生活和工作显得越来越重要,特别是现在信息高度发达的今天,人们对最新信息的需求和发布迫切的需要及时性。为了满足不同人们对网络需求,各种特色,各种主题的…

函数战争(栈帧)之创建与销毁(c语言)(vs2022)

首先,什么是函数栈帧? C语言中,每个栈帧对应着一个未运行完的函数。栈帧中保存了该函数的返回地址和局部变量。栈帧也叫过程活动记录,是编译器用来实现过程函数调用的一种数据结构。 以问答的方式解释编译器与解释器-CSDN博客htt…

【C++入门】函数模板类模板(泛型编程)

目录 前言 1. 泛型编程 2. 函数模板 2.1 概念 2.2 语法格式 2.3 原理 2.4 函数模板的实例化 隐式实例化 显示实例化 2.5 思考 2.6 模板参数的匹配原则 3. 类模板 3.1 类模板的定义格式 3.2 类模板的实例化 总结 前言 函数模板和类模板是C中的两种重要的模板形式,…