当前位置: 首页 > news >正文

4. 硬件实现

博客补充:

CUDA C++ 编程指南学习_c++ cuda编程-CSDN博客icon-default.png?t=O83Ahttps://blog.csdn.net/qq_62704693/article/details/141225395?spm=1001.2014.3001.5501NVIDIA GPU 架构是围绕可扩展的多线程流式多处理器 (SM) 阵列构建的。当主机 CPU 上的 CUDA 程序调用内核网格时,网格的块被枚举并分发到具有可用执行能力的多处理器。线程块的线程在一个多处理器上并发执行,多个线程块可以在一个多处理器上并发执行。当线程块终止时,将在空出的多处理器上启动新块。

多处理器旨在并发执行数百个线程。为了管理如此大量的线程,它采用了一种称为 SIMT单指令、多线程)的独特架构,如 SIMT 架构中所述。指令是流水线化的,利用单个线程中的指令级并行性,以及通过同步硬件多线程实现的广泛线程级并行性,如硬件多线程中所述。与 CPU 内核不同,它们是按顺序发布的,没有分支预测或推测执行。

SIMT 体系结构和硬件多线程描述了所有设备通用的流式多处理器的体系结构功能。计算能力 5.x、计算能力 6.x 和计算能力 7.x 分别提供了计算能力 5.x、6.x 和 7.x 的设备的具体信息。

NVIDIA GPU 架构使用 little-endian 表示。

4.1. SIMT 架构

多处理器以 32 个并行线程(称为 warp)为一组创建、管理、调度和执行线程。组成 warp 的各个线程从同一个程序地址一起开始,但它们有自己的指令地址、计数器和寄存器状态,因此可以自由分支和独立执行。经线一词起源于织造,这是第一种平行线技术。半 Warp 是 Warp 的前半部分或后半部分。四分之一经纱是经纱的第一、第二、第三或第四四分之一。

当一个多处理器被赋予一个或多个线程块来执行时,它会将它们划分为 warp,每个 warp 都由 warp 调度器调度执行。块被划分为 warps 的方式总是相同的;每个 warp 都包含连续的线程,线程 ID 不断增加,第一个 warp 包含线程 0。线程层次结构 描述线程 ID 与块中的线程索引的关系。

一个 warp 一次执行一条公共指令,因此当 warp 的所有 32 个线程都同意其执行路径时,就可以实现最高效率。如果 warp 的线程通过数据依赖的条件分支发散,则 warp 将执行所采用的每个分支路径,从而禁用不在该路径上的线程。分支发散仅发生在 warp 内;不同的 WARP 独立执行,无论它们是执行公共代码路径还是不相交的代码路径。

SIMT 架构类似于 SIMD (Single Instruction, Multiple Data) 向量组织,因为单个指令控制多个处理元素。一个关键区别在于,SIMD 向量组织向软件公开 SIMD 宽度,而 SIMT 指令指定单个线程的执行和分支行为。与 SIMD 向量机相比,SIMT 使程序员能够为独立的标量线程编写线程级并行代码,以及为协调线程编写数据并行代码。为了正确性,程序员基本上可以忽略 SIMT 行为;但是,通过注意代码很少要求 warp 中的线程发散,可以实现实质性的性能改进。在实践中,这类似于传统代码中 cache 行的作用: 在设计正确性时可以安全地忽略 Cache 行大小,但在设计峰值性能时必须在代码结构中考虑它。另一方面,矢量架构需要软件将负载合并为矢量并手动管理发散。

在 NVIDIA Volta 之前,warp 使用在 warp 中的所有 32 个线程之间共享的单个程序计数器,以及指定 warp 活动线程的活动掩码。因此,来自不同区域或不同执行状态的同一 warp 的线程无法相互发出信号或交换数据,并且需要精细共享由锁或互斥锁保护的数据的算法很容易导致死锁,具体取决于争用线程来自哪个 warp。

从 NVIDIA Volta 架构开始,独立线程调度允许线程之间完全并发,而不管 warp 如何。使用独立线程调度,GPU 可以维护每个线程的执行状态,包括程序计数器和调用堆栈,并且可以在每个线程的粒度上产生执行,以更好地利用执行资源或允许一个线程等待另一个线程生成数据。调度优化器确定如何将来自同一 warp 的活动线程分组到 SIMT 单元中。这保留了与以前的 NVIDIA GPU 一样 SIMT 执行的高吞吐量,但具有更大的灵活性:线程现在可以以 sub-warp 粒度发散和重新收敛。

如果开发人员对 warp-synchronicity 做出假设,则独立线程调度可能会导致一组与预期完全不同的线程参与执行的代码2以前的硬件架构。特别是,任何 warp 同步代码(例如无同步、intra-warp 减少)都应该重新审视,以确保与 NVIDIA Volta 及更高版本兼容。有关更多详细信息,请参阅 Compute Capability 7.x。

注意

参与当前指令的 warp 线程称为活动线程,而不在当前指令上的线程处于非活动状态(禁用)。线程处于非活动状态的原因有很多,包括比其 warp 的其他线程更早退出,采用的分支路径与 warp 当前执行的分支路径不同,或者是线程数不是 warp 大小的倍数的块的最后一个线程。

如果 warp 执行的非原子指令写入 warp 的多个线程的全局或共享内存中的同一位置,则对该位置发生的序列化写入次数会因设备的计算能力而异(请参阅计算能力 5.x、计算能力 6.x、 和 Compute Capability 7.x),并且哪个线程执行最终写入是不确定的。

如果 warp 执行的原子指令对 warp 的多个线程的全局内存中的同一位置进行读取、修改和写入,则对该位置的每次读取/修改/写入都会发生,并且它们都被序列化,但它们出现的顺序是不确定的。

4.2. 硬件多线程

由 multiprocessor 处理的每个 warp 的执行上下文 (程序计数器、寄存器等) 在 warp 的整个生命周期内都保留在片上。因此,从一个执行上下文切换到另一个执行上下文没有成本,并且在每个指令发出时,warp 调度器都会选择一个具有线程准备执行其下一条指令(warp 的活动线程)的 warp,并向这些线程发出指令。

特别是,每个 multiprocessor 都有一组在 warps 之间分区的 32 位 registers,以及一个在 thread blocks 之间分区的 parallel data cache 或 shared memory

对于给定内核,可以在 multiprocessor 上驻留并一起处理的 blocks 和 warp 的数量取决于 kernel 使用的 registers 和 shared memory 的数量以及 multiprocessor 上可用的 registers 和 shared memory 的数量。每个多处理器也有最大常驻块数和最大常驻 warp 数。这些限制以及 multiprocessor 上可用的 registers 和 shared memory 数量是器件计算能力的函数,在 Compute Capabilities 中给出。如果每个 multiprocessor 没有足够的 registers 或 shared memory 来处理至少一个 block,则内核将无法启动。

一个区块中的 warp 总数如下:

ceil(\frac{T}{W_{size}},1)

  • T 是每个块的线程数,

  • Wsize 是变形大小,等于 32,

  • ceil(x, y) 等于 x 向上舍入到最接近的 y 的倍数。

为块分配的寄存器总数和共享内存总量记录在 CUDA 工具包中提供的 CUDA 占用计算器中。

2

术语 warp-synchronous 是指隐式假设同一 warp 中的线程在每条指令上都同步的代码。

相关文章:

4. 硬件实现

博客补充: CUDA C 编程指南学习_c cuda编程-CSDN博客https://blog.csdn.net/qq_62704693/article/details/141225395?spm1001.2014.3001.5501NVIDIA GPU 架构是围绕可扩展的多线程流式多处理器 (SM) 阵列构建的。当主机 CPU 上的 CUDA 程序…...

《操作系统真象还原》第3章 完善MBR【3.1 — 3.2】

目录 引用与说明 3.1、地址、section、vstart 浅尝辄止 1、什么是地址 2、什么是 section【汇编】 3、什么是 vstart【汇编】 3.2、CPU 的实模式 1、CPU 工作原理【重要】 2、实模式下的寄存器 4、实模式下 CPU 内存寻址方式 5、栈到底是什么玩意儿 6 ~ 8 无条件转移…...

八大排序-冒泡排序

在里面找动图理解 【数据结构】八大排序(超详解附动图源码)_数据结构排序-CSDN博客 一 简介 冒泡排序应该是我们最熟悉的排序了,在C语言阶段我们就学习了冒泡排序。 他的思想也非常简单: 两两元素相比,前一个比后一个大就交换&#xff0…...

基于Spring Boot+Vue的助农销售平台(协同过滤算法、节流算法、支付宝沙盒支付、图形化分析)

🎈系统亮点:协同过滤算法、节流算法、支付宝沙盒支付、图形化分析; 一.系统开发工具与环境搭建 1.系统设计开发工具 后端使用Java编程语言的Spring boot框架 项目架构:B/S架构 运行环境:win10/win11、jdk17 前端&…...

uniapp写抖音小程序阻止右滑返回上一个页面

最近用uniapp写小程序遇到一个问题因为内部用到右滑的业务&#xff0c;但是只要右滑就会回到上一页面&#xff0c;用了event.preventDeafult()没有用&#xff0c;看了文档找到了解决办法 1.在最外层view加上touchstart事件 <view class"container" touchstart&q…...

华为配置手工负载分担模式链路聚合实验

目录 组网需求 配置思路 操作步骤 配置文件 组网图形 图1 配置手工负载分担模式链路聚合组网图 组网需求配置思路操作步骤配置文件 组网需求 如图1所示&#xff0c;AC1和AC2通过以太链路分别都连接VLAN10和VLAN20&#xff0c;且AC1和AC2之间有较大的数据流量。 用户希望A…...

【Spring】Cookie与Session

&#x1f490;个人主页&#xff1a;初晴~ &#x1f4da;相关专栏&#xff1a;计算机网络那些事 一、Cookie是什么&#xff1f; Cookie的存在主要是为了解决HTTP协议的无状态性问题&#xff0c;即协议本身无法记住用户之前的操作。 "⽆状态" 的含义指的是: 默认情况…...

chat_gpt回答:qt中,常见格式及格式转换

在Qt中&#xff0c;常见的数据格式包括&#xff1a; QVariant&#xff1a;可以存储多种数据类型&#xff0c;包括整型、浮点型、字符串、布尔值、日期等。QString&#xff1a;用于存储和处理文本字符串。QByteArray&#xff1a;用于处理字节数组&#xff0c;常用于二进制数据。…...

CSS兼容处理

“前端开发兼容——CSS篇” 在前端开发中&#xff0c;CSS样式的兼容性问题常常让开发者感到棘手&#xff0c;尤其是当涉及到IE浏览器时。由于IE浏览器版本繁多&#xff0c;每个版本在CSS支持上还存在差异&#xff0c;这导致开发者在实现统一的视觉效果时&#xff0c;不得不编写…...

制氮机分子筛的材质选择

制氮机分子筛的材质选择对于其性能和效率至关重要。作为制氮设备中的核心部件&#xff0c;分子筛承担着将空气中的氮气与氧气有效分离的重任。以下是对制氮机分子筛常用材质的详细探讨&#xff1a; 制氮机分子筛的主要材质 碳分子筛(CMS) 碳分子筛由活性炭经过特殊工艺加工而成…...

使用Virtual Audio Cable捕获系统音频输出并使用Python处理

一、下载安装Virtual Audio Cable&#xff0c;软件下载地址和安装过程略过。 二、Virtual Audio Cable使用方法Virtual Audio Cable使用笔记一&#xff1a;使用Virtual Audio Cable将播放器的音频流传输到真实声卡驱动中_virtual audio cable control panel-CSDN博客 三、打开…...

微信小程序scroll-view吸顶css样式化表格的表头及iOS上下滑动表头的颜色覆盖及性能分析

微信小程序scroll-view吸顶css样式化表格的表头及iOS上下滑动表头的颜色覆盖及性能分析 目录 微信小程序scroll-view吸顶css样式化表格的表头及iOS上下滑动表头的颜色覆盖及性能分析 1、iOS在scroll-view内部上下滑动吸顶的现象 正常的上下滑动吸顶覆盖&#xff1a; iOS及iPa…...

HDU-1695 GCD

题目大意&#xff1a;已知 1 < x < b , 1 < y < d , 求 gcd ( x , y ) k 的对数。请注意&#xff0c;&#xff08;x5&#xff0c; y7&#xff09; 和 &#xff08;x7&#xff0c; y5&#xff09; 被认为是相同的。 思路&#xff1a;先将 gcd ( x , y ) k 两边同时…...

unity游戏开发之赛车游戏

在这个 unity 2d 赛车游戏教程中&#xff0c;我将构建一款移动超休闲赛车游戏。 这将是一个简单的 unity 2d 汽车游戏。所以这将需要有一个可以无限滚动的背景。 我们需要避开一些障碍。一些评分系统。 以及一种使用我们的手机加速度计控制我们的汽车的方法。然后&#xff0c;我…...

解决milvus migration 迁移数据到出现数据丢失问题

在迁移数据的时候发现数据丢失 问题是数据在批量迁移的过程中&#xff0c;这个错误会被忽略掉 分析下来是因为buuferSize 设置的是500条数据&#xff0c;但是迁移工具对一次迁移的数据是是有大小限制的&#xff0c;如果500条数据的总大小大于4194304&#xff0c;就会导致数据…...

Python Flask 数据库开发

Python Flask 数据库开发 引言环境配置创建 Flask 应用&#xff0c;连接数据库定义路由定义模型创建表创建 API 数据库直接操作启动 Flask 应用app.py 示例运行 Flask访问应用 展望 引言 在现代 web 开发中&#xff0c;Python 的 Flask 框架因其轻量和灵活性受到广泛欢迎。结合…...

深度学习(七)深度强化学习:融合创新的智能之路(7/10)

一、深度强化学习的崛起 深度强化学习在人工智能领域的重要地位 深度强化学习作为一种融合了深度学习和强化学习的新技术&#xff0c;在人工智能领域占据着至关重要的地位。它结合了深度学习强大的感知能力和强化学习优秀的决策能力&#xff0c;能够处理复杂的任务和环境。例如…...

mac电脑通过 npm 安装 @vue/cli脚手架超时问题;

npm 安装 vue/cli遇到的问题步骤 一、安装 Homebrew 如果你还没有安装 Homebrew&#xff0c;首先需要安装它。Homebrew 是 macOS 上的一款包管理工具&#xff0c;它允许你通过简单的命令行指令安装、更新和卸载软件包。&#xff1b; 1, 打开终端&#xff08;Terminal&#xf…...

【52 机器学习 | 基于KNN近邻和随机森林模型对用户转化进行分析与预测】

文章目录 &#x1f3f3;️‍&#x1f308; 1. 导入模块&#x1f3f3;️‍&#x1f308; 2. Pandas数据处理2.1 读取数据2.2 查看数据信息2.3 字段说明2.4 删除重复值2.5 删除空值 &#x1f3f3;️‍&#x1f308; 3. 数据分析-特征分析3.1 年龄及转化率分析3.2 各营销渠道人数及…...

【Linux】Zookeeper 部署

Zookeeper 搭建方式 单机模式&#xff1a;Zookeeper只运行在一台服务器上&#xff0c;适合测试环境伪集群模式&#xff1a;就是在一台物理机上运行多个Zookeeper 实例&#xff1b;集群模式&#xff1a;Zookeeper运行于一个集群上&#xff0c;适合生产环境&#xff0c;这个计算…...

树莓派超全系列教程文档--(61)树莓派摄像头高级使用方法

树莓派摄像头高级使用方法 配置通过调谐文件来调整相机行为 使用多个摄像头安装 libcam 和 rpicam-apps依赖关系开发包 文章来源&#xff1a; http://raspberry.dns8844.cn/documentation 原文网址 配置 大多数用例自动工作&#xff0c;无需更改相机配置。但是&#xff0c;一…...

《Qt C++ 与 OpenCV:解锁视频播放程序设计的奥秘》

引言:探索视频播放程序设计之旅 在当今数字化时代,多媒体应用已渗透到我们生活的方方面面,从日常的视频娱乐到专业的视频监控、视频会议系统,视频播放程序作为多媒体应用的核心组成部分,扮演着至关重要的角色。无论是在个人电脑、移动设备还是智能电视等平台上,用户都期望…...

跨链模式:多链互操作架构与性能扩展方案

跨链模式&#xff1a;多链互操作架构与性能扩展方案 ——构建下一代区块链互联网的技术基石 一、跨链架构的核心范式演进 1. 分层协议栈&#xff1a;模块化解耦设计 现代跨链系统采用分层协议栈实现灵活扩展&#xff08;H2Cross架构&#xff09;&#xff1a; 适配层&#xf…...

镜像里切换为普通用户

如果你登录远程虚拟机默认就是 root 用户&#xff0c;但你不希望用 root 权限运行 ns-3&#xff08;这是对的&#xff0c;ns3 工具会拒绝 root&#xff09;&#xff0c;你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案&#xff1a;创建非 roo…...

Spring AI与Spring Modulith核心技术解析

Spring AI核心架构解析 Spring AI&#xff08;https://spring.io/projects/spring-ai&#xff09;作为Spring生态中的AI集成框架&#xff0c;其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似&#xff0c;但特别为多语…...

ABAP设计模式之---“简单设计原则(Simple Design)”

“Simple Design”&#xff08;简单设计&#xff09;是软件开发中的一个重要理念&#xff0c;倡导以最简单的方式实现软件功能&#xff0c;以确保代码清晰易懂、易维护&#xff0c;并在项目需求变化时能够快速适应。 其核心目标是避免复杂和过度设计&#xff0c;遵循“让事情保…...

网站指纹识别

网站指纹识别 网站的最基本组成&#xff1a;服务器&#xff08;操作系统&#xff09;、中间件&#xff08;web容器&#xff09;、脚本语言、数据厍 为什么要了解这些&#xff1f;举个例子&#xff1a;发现了一个文件读取漏洞&#xff0c;我们需要读/etc/passwd&#xff0c;如…...

jmeter聚合报告中参数详解

sample、average、min、max、90%line、95%line,99%line、Error错误率、吞吐量Thoughput、KB/sec每秒传输的数据量 sample&#xff08;样本数&#xff09; 表示测试中发送的请求数量&#xff0c;即测试执行了多少次请求。 单位&#xff0c;以个或者次数表示。 示例&#xff1a;…...

【p2p、分布式,区块链笔记 MESH】Bluetooth蓝牙通信 BLE Mesh协议的拓扑结构 定向转发机制

目录 节点的功能承载层&#xff08;GATT/Adv&#xff09;局限性&#xff1a; 拓扑关系定向转发机制定向转发意义 CG 节点的功能 节点的功能由节点支持的特性和功能决定。所有节点都能够发送和接收网格消息。节点还可以选择支持一个或多个附加功能&#xff0c;如 Configuration …...

libfmt: 现代C++的格式化工具库介绍与酷炫功能

libfmt: 现代C的格式化工具库介绍与酷炫功能 libfmt 是一个开源的C格式化库&#xff0c;提供了高效、安全的文本格式化功能&#xff0c;是C20中引入的std::format的基础实现。它比传统的printf和iostream更安全、更灵活、性能更好。 基本介绍 主要特点 类型安全&#xff1a…...