当前位置: 首页 > 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;这个计算…...

配置mysql 主主模式 GTID

文章目录 一、前提二、修改my.cnf主1 10.255.131.9主2 10.255.131.10 三、配置主主3.1 配置主 10.255.131.93.2 配置从 10.255.131.103.3 配置主 10.255.131.103.4 配置从 10.255.131.9 四、验证五、同步问题排查以及恢复5.1 查看同步状态5.2 查看同步是否数据一致性&#xff0…...

推荐一款多显示器屏幕亮度调节工具:Twinkle Tray

Twinkle Tray中文版使您可以轻松管理多台显示器的亮度级别。 尽管 Windows 10 能够调节大多数显示器的背光&#xff0c;但它通常不支持外部显示器。 Windows 还缺乏管理多台显示器的亮度的任何功能。 该应用程序将一个新图标插入系统托盘&#xff0c;您可以在其中单击以立即访问…...

第十一章 Shiro会话管理和加密

学习目标 11.1 会话管理11.1.1 会话相关API一、获取会话二、会话属性管理三、会话信息获取四、会话控制五、会话监听六、会话DAO七、会话验证 11.2 缓存一、缓存接口二、内置缓存实现三、配置缓存四、使用缓存五、缓存清理六、注意事项 前面两章我们已经掌握了Shiro四大基石的认…...

DDR4单个DQ仿真实战(一)

目录 引言1、新建Workspace2、导入brd文件3、在SiPro中打开Layout&#xff1a;查看并编辑叠层4、PCB剪裁&#xff08;可选&#xff09;5、创建SiPro6、创建分析模型7、查看分析结果8、创建原理图9、系统行为级仿真 引言 DDR4仿真将按照以下几个步骤进行&#xff1a; 新建Work…...

Android Studio插件版本与Gradle 版本对应关系

一、背景 Android Studio 构建系统以 Gradle 为基础&#xff0c;并且 Android Gradle 插件添加了几项专用于构建 Android 应用的功能。 虽然 Android 插件通常会与 Android Studio 的更新步调保持一致&#xff0c;但插件&#xff08;以及 Gradle 系统的其余部分&#xff09;可…...

Uni-App-01

HBuilder安装卸载 安装 官网地址&#xff1a;https://www.dcloud.io/hbuilderx.html 下载HBuilder最新版 解压到安装目录&#xff0c;路径中不要有中文和空格 在桌面上增加快捷方式 卸载 执行reset.bat 删除HBuilder文件夹&#xff08;如果提示文件被占用&#xff0…...

Java版本鸿鹄工程项目管理系统源码概述

项目背景 随着企业规模的扩大和业务的复杂化&#xff0c;传统的工程项目管理方式已经无法满足高效、准确、实时的管理需求。为了提高工程管理效率、优化资源配置、降低风险并控制成本&#xff0c;企业决定通过数字化转型&#xff0c;构建一个基于Spring Cloud、Spring Boot、M…...

基于echarts、php、Mysql开发的数据可视化大屏

大屏效果展示 管理员进入数据可视化页面将看到数据可视化大屏。大屏内容包括两个条形图&#xff0c;用于统计当前网站所有用户的MBTI 16型人格分布&#xff1b;玫瑰图&#xff0c;用于展示当前网站用户MBTI四个维度&#xff0c;八个字母的占比&#xff1b;折线图&#xff0c;用…...

Me-and-My-Girlfriend-1

Me-and-My-Girlfriend-1 解题 信息收集 nmap扫描存活主机 我的虚拟机为131 所以发现130为目标靶机。 查看网站&#xff0c;找到可利用点 使用浏览器查看&#xff0c;使用xff伪造本地用户。 注册用户cat&#xff0c;观察url有url_id,改为5&#xff0c;发现alice用户。 将…...

R语言实现GWAS meta分析(1)

1、基于数据集的Meta分析 datafilenamec("data1.txt","data2.txt"), setwd(workdir) library(Metalgwas) a1 name1c() for(i in datafilename){ assign(paste("file",a,sep""),data.table::fread(paste(getwd(),"/","…...

订票网站模板/aso100官网

文章目录方法下包项目方法 用有道翻译接口请求 有道翻译接口文档 api: https://openapi.youdao.com/api 下包 pip install requests项目 mkdir pyfanyi cd pyfanyi cd.> __init__.py cd.> __main__.py cd.> request.py__init__.py将pyfanyi文件夹变成python包 __m…...

阿里云域名购买流程/苏州seo服务热线

hello 大家好,作为一只单身程序员,我只能说刚刚踏入了程序员的门槛,还有许多知识要学–比如说…想说的太多,我却欲言又止! 少罗嗦直接看东西— 带着问题去学习才能更高效的记忆—理解万岁这句话还真是万能的. 第一个问题(包含两小问)— 1,java中如何建立一个窗口----2,新建的窗…...

资源收费网站怎么做/小果seo实战培训课程

程序运行的两种方式&#xff1a;静态编译和动态解释静态编译的程序在执行前全部被翻译为机器码动态解释执行的则是一句一句边运行边翻译Java严格说来是“半解释半编译”型的语言Java代码首先由javac编译器编译成字节码(ByteCode)。字节码文件中JVM指令(也称字节码指令)是JVM唯一…...

俄罗斯做牙网站/网站广告调词平台

ArrayList1. 可变数组实现&#xff0c;1.5倍扩容2. 非线程安全3. 采用了Fail-Fast机制&#xff0c;面对并发的修改时&#xff0c;迭代器很快就会完全失败&#xff0c;而不是冒着在将来某个不确定时间发生任意不确定行为的风险LinkedList1. 双向循环链表实现2. 非线程安全3. 元素…...

广州网站建设系统开发/整站优化seo

您已经完成了健身应用两个主要页面的制作,现在来给两个页面的内容添加动画效果,首先返回编辑器的顶部。 添加一个布尔类型的属性,标识是否开始播放动画。 设置标题视图的默认不透明度为0,当开始执行动画时,视图逐渐显示出来。 使用相同的方式,给列表视图添加渐显动画,…...

网站建设案例怎么样/网站建设公司官网

1.1 - 概述 Java 总述&#xff1a;Java 不仅是一门编程语言&#xff0c;还是一个由一系列 计算机软件 和 规范 形成的技术体系&#xff0c;这个技术体系提供了完整的用于软件开发和跨平台部署的支持环境&#xff0c;并广泛应用于嵌入式系统。移动终端 。企业服务器 。大型机等各…...