CPU线程与超线程技术

article/2025/9/1 20:24:28

文章目录

  • 一、CPU线程与OS线程
    • 1. CPU中的thread
    • 2. OS中的thread
  • 二、HT/SMT技术
    • 1. 定义
    • 2. 原理
    • 3. 带来的问题
  • 三、SIMT与SIMD
    • 1. SIMT
    • 2. SIMD
    • 3. 对比


一、CPU线程与OS线程

1. CPU中的thread

CPU中的线程来自同步多线程(SMT,Simultaneous Multi-threading)的概念,最早Intel使用了这种技术时候就叫做SMT,但后面改叫做HT (Hyper Threading)。

经常看到的2C4T的意思就是2核4线程。1个内核中的thread是对称的和对等的,在软件上没有任何区别,BIOS也只有通过一些特殊手段才能区分。4个thread调度起来没有本质区别,它们都有自己的APIC ID。用Local APIC寄存器发出IPI(Inter-Processor Interrupts),指定APIC ID的线程即被调度执行相应地址的指令了,也可以广播IPI让所有的thread都去执行指定任务。

操作系统并不探测CPU中thread的数量,而是通过广播IPI让各个thread自己来签到,再由BIOS通过APIC报告给OS的。

2. OS中的thread

OS中的线程有自己的栈空间,和同一进程中的其他线程共享地址空间。

操作系统中的进程可以很多,进程中的线程就更多了,常常有几十个上百个。而CPU的Thread就那么固定几个,是稀缺资源。两者都叫Thread是因为他们都是调度的基本单位。操作系统负责把它产生的软Thread调度到CPU中的硬Thread。

二、HT/SMT技术

1. 定义

把所有一个物理核心上有多个虚拟核心的技术都叫做HT/SMT,初衷是通过提升CPU核心后端执行单元的利用率,来提升整体的并行性能。

相比于增加物理核心,使用SMT来的更加廉价。因为SMT提供的是虚拟核心,所有虚拟核心共享很大一部分的资源,通常加入SMT技术只需要在前端额外增加一部分资源(毕竟两个任务是两个上下文)就可以。

2. 原理

除了频率以外,要提升CPU的单核性能,第一个常见手段就是尽可能的缩短每个指令执行的周期。第二个常见手段就是指令级并行(ILP),只要两个指令之间没有依赖(彼此不依赖对方执行后的数据)和冲突(不共享资源,不是一类操作)就可以并发执行,从而缩短总的执行时间。

显然,如果在一个CPU核心同时执行几组任务,那么CPU至少具备多组执行端口。所以现代的CPU要提升单核性能,都会尽可能的把后端的执行端口数目变多,并且尽可能的在单位时间内读入更多指令,从而促进指令间的并发。

实际的任务里,指令之间的依赖冲突关系是错综复杂的,不可能完美的将指令均匀的分组到每一个端口上。随着单核性能的不断提升,后端执行资源也越来越丰富,这种执行端口闲置的情况就会越来越明显,造成资源浪费。这时候,为了将这些资源物尽其用,SMT就应运而生了。SMT的思路是这样的,既然一个任务填不满后端的资源,那么我们就找不只一个任务来填就好了,不同任务之间的相互依赖和冲突情况很低,放到一起来执行正合适去填满后端资源,所以可以用不同的任务尽可能填满后端资源。
在这里插入图片描述

上图表示了在一个CPU核心上虚拟出两个虚拟核心,同时执行两个任务,从而缩短了执行时间。我们可以通过引入更多的虚拟核心,来进一步压榨利用率,只不过随着SMT虚拟的核心增多,提升的比率是在下降的。

3. 带来的问题

a. 多线程维护开销:一个物理核心如果引入多个线程,那么是要协调、隔离多个线程的,这会引入额外的开销。所以如果一个核心有两个线程,那么两个线程的总执行时间会更快,但是如果细分到每一个线程的执行时间,会比分别执行来的慢一些。

b. 资源冲突:SMT核心中,因为多个逻辑核心会共享很多资源,如果两个线程的性质比较接近,总是在使用类似的资源,那么它们会遭遇资源冲突。程度轻一点的情况下,互相等待一下就好,多牺牲一点单线程性能,还能保证多线程效率。而差一点的情况就是资源冲突反而导致性能下降。最典型的冲突就是缓存的冲突,一个线程可以用100%的缓存,而超过一个线程使用同一个缓存,可用缓存就不是100%,会导致大量开销极大的缓存-内存换入换出。只要有一个线程是非常吃缓存的,那么加入SMT不但不会提升总的执行效率,反而会降低整体的效率。SMT非常忌讳不同线程的资源冲突,一但冲突SMT就很容易引入反面效果。比如在很多云服务器、HPC服务器上,SMT通常是关闭的,就是因为资源冲突。

c. 线程安全问题:两个线程在同一个核心内执行,是需要严格隔离它们的上下文的,线程A不能访问修改其他线程的资源。线程隔离是一个非常复杂和繁琐的过程,如果隔离不彻底,那么会导致执行错误、以及隐私泄漏的问题。Intel前两年Skylake爆发的若干安全漏洞,就是因为线程隔离不到位造成的。

d. 导致功耗增加:SMT整体的思路是略微牺牲单核性能/能耗比,换取大多数情况下的多线程时的单核性能和能耗比,那么对应的加入SMT后单核的能耗比会有些许倒退。由于引入SMT会导致核心设计更加复杂,静态功耗、漏电会更难控制,这对于移动设备是致命的。这也是为什么SMT在PC和服务器上大行其道这么多年,手机上几乎看不到的原因。

三、SIMT与SIMD

1. SIMT

SIMT:single instruction,multiple threads。SIMT类似CPU上的多线程。最简单的理解SIMT的是想象有这样一个多核系统,每一个core有自己的寄存器文件、自己的ALU、自己的data cache,但是没有独立的instruction cache、独立的解码器、独立的Program Counter register,命令是从单一的instruction cache同时被广播给多个SIMT core的。即所有的core是各有各的执行单元,数据不同,执行的命令却是相同的。

2. SIMD

SIMD:single instruction, multiple data。Flynn分类法中的一种并行计算机。这种方法是指对多个进行同样操作的处理元素同时进行同等操作。这种机器利用了数据级别的并行性,而不是并发性(不是多线程那种)。SIMD允许使用单一命令对多个数据值进行操作,仅需要一个核心,只有一个进程在运行,多个计算共用一个ALU,只不过一次操作多个数据而已。这是一种增加CPU的计算能力的便宜的方法。仅需要宽的ALU和较小的控制逻辑。

3. 对比

a. SIMD跟SIMT不是一个数量级的,SIMD仅仅需要寄存器位数多一点,然后ALU宽一点,一次能处理的数据量很有限。SIMT在GPU上,GPU是有成百上千的单独的计算单元的。硬件实现上,明显GPU更复杂,成本也更高。

b. SIMD是一个线程,在一个核心上。SIMT是多个线程,多个核心上运行的线程。SIMT是真正的并行,各个线程的逻辑都可以有一定的区别;SIMD仅仅能进行简单的加减乘除运算而已。

c. SIMD是CPU上用的,SIMT是GPU上用的。SIMD更像是CPU的一个小扩展,SIMT是GPU上并发性的核心保证。


以上内容来源于网络知识总结,如有侵权请私信联系立即删除:)


http://chatgpt.dhexx.cn/article/8JNvAVP6.shtml

相关文章

GPU 软硬件基本概念

术语: single instruction, multiple thread (SIMT): a single instruction is executed on several function units in parallel GPU的硬件结构中与CUDA相关的几个概念:thread block grid warp sp sm streaming processor(sp): 最基本的处理单元&…

GPU异构计算基础知识

CUDA Toolkit Documentation (nvidia.com) host CPU和内存 (host memory)Device GPU和显存 (device memory) SIMT模型与SIMD模型的区别 SIMD(Single Instruction Multi Data,单指令多数据)模型要求同一个向量中的所有元素要在统一的同步组中一起执行,…

GPU硬件架构以及运行机制笔记

本文是对向往大神的文章的一个笔记。 想阅读原文章移步博客园搜索向往 原文章比较长,这是一个精简和自己的一些理解 这篇文章要带着下面的问题去看 1、GPU是如何与CPU协调工作的? 2、GPU也有缓存机制吗?有几层?它们的速度差异多…

4. CUDA编程手册中文版---硬件实现

第四章 硬件实现 更多精彩内容,请扫描下方二维码或者访问https://developer.nvidia.com/zh-cn/developer-program 来加入NVIDIA开发者计划 NVIDIA GPU 架构围绕可扩展的多线程流式多处理器 (SM: Streaming Multiprocessors) 阵列构建。当主机 CPU 上的 CUDA 程序调…

SMIT介绍

System Management Interface Tool(系统管理界面工具) 软件安装与维护(Sofeware Installation and Maintenance) 软件许可管理(Sofeware License Management) 版本管理(Manage Editions) 设备管理&#…

GPU硬件结构和编程模型(源于nvidia的CUDA文档)

GPU的硬件结构 GPU通过一个可扩展的多线程流式多处理器(SMs)构建。一个multiprocessor可以在同一时间处理上百个线程。为了管理这些线程,使用一个特殊的结构SIMT。利用单线程中指令级的并行,以及同步硬件多线程实现的广泛线程级并行性。 SIMT Architec…

实例分割文献阅读笔记(一)SimT

阅读 SimT: Handling Open-set Noise for Domain Adaptive Semantic Segmentation 原作者知乎文章链接:知乎文章 GitHub链接:开源数据 SimT (CVPR22):为了解决域自适应(包含UDA和SFDA)任务中目标域数据伪标签中存在…

第三章 SIMT 内核:指令和寄存器数据流

在本章和下一章中,我们将研究现代 GPU 的架构和微架构。 我们将对 GPU 架构的讨论分为两部分:(1) 在本章中研究实现计算部分的 SIMT 内核,然后 (2) 在下一章中研究内存系统。 在其传统的图形渲染角色中,GPU 访问数据集&#xff0…

从GPU编程到SIMT核心

本文转自:从GPU编程到SIMT核心 - 知乎 (zhihu.com) 1、前言&本文重点 在 GPGPU 显得愈发重要的今天,仅凭 nVidia, AMD 提供的编程接口来了解 GPU 未免显得太单薄了些。时至今日, GPU 内部如何执行一条指令的对程序员来说依然是透明的、…

并行计算范式-SIMD vs SIMT vs SMT: What’s the Difference Between Parallel Processing Models?

Modern processor architectures utilize various execution models. Out of these, two are most popular: SIMD (Single Instruction Multiple Data) and SIMT (Single Instruction Multiple Threads). There’s also SMT (Simultaneous Multithreading), but that’s someth…

SIMD<SIMT<SMT: NVIDIA GPU的并行机制

原文出处&#xff1a; SIMD < SIMT < SMT: parallelism in NVIDIA GPUs 目录 1、概述 1.1、SIMD 2、SIMD vs SIMT 2.1 单指令、多套寄存器组 2.2 单指令、多个数据访问单元 2.3 单指令、多种运算逻辑路径 3、SIMD vs SIMT 3.1 GPU通过多thread来实现高thro…

关于GPU一些笔记(SIMT方面)

GPU组成 《计算机组成原理 — GPU 图形处理器》已经大概说明出GPU一般都是由比CPU多的core组成&#xff0c;而每个core 相当于一个单独线程进行计算&#xff0c;并且可以同时触发执行相同的单一指令但是每个计算单元数据不同(称之为SIMD)的指令执行。在英伟达GPU中 core一般称…

如何理解GPU中的SIMT(单指令流多线程模型)

随着设备尺寸逐渐变小&#xff0c;使得时钟频率很难有大的提升&#xff0c;人们开始寻找更有效的架构。为了提高能源效率&#xff0c;需要引入支持向量运算的硬件和减少数据的移动。 当下的架构通常是CPUGPU的&#xff0c;CPU在未来一段时间不会完全被GPU所取代&#xff0c;因…

mysql怎么设置主键唯一性约束_MySQL主键约束和唯一性约束

MySQL主键约束和唯一性约束都是索引&#xff0c;它们的区别是&#xff1a; 主键字段可以确保唯一性&#xff0c;但主键字段不能为NULL. 唯一性约束可以确保唯一性&#xff0c;但唯一性约束的字段可以为NULL 唯一性约束对含有NULL的记录不起作用&#xff0c;即可以重复加入含有N…

mysql唯一性约束的作用_sql唯一约束有什么用

SQL中唯一约束的作用是保证每个记录中都有一个唯一的标识&#xff0c;使得该列上没有相同的两个记录值&#xff1b;其中表的主键就是一个唯一性约束&#xff0c;不过主键只能有一个&#xff0c;所以如果其他列的数据不允许重复的话&#xff0c;就可以建立唯一性约束。 SQL中唯一…

mysql多字段唯一约束_mysql多字段唯一约束

MySQL唯一约束(Unique Key)要求该列唯一,允许为空,但只能出现一个空值。唯一约束可以确保一列或者几列不出现重复值。 在创建表时设置唯一约束 在定义完列之后直接使用 UNIQUE 关键字指定唯一约束,语法规则如下: UNIQUE 创建数据表 tb_dept2,指定部门的名称唯一,输入的 S…

mysql 修改唯一约束_mysql如何修改唯一性约束跟主键约束

一、如何添加主键约束和唯一性约束 1、添加主键约束 执行语法: alter table tableName add primarykey(column_name);#千万别忘了加(),同时要保证表结构中没有其他的主键,因为一个表中只能有一个主键。 2、添加唯一性约束 执行语法: alter table tableName addunique(colum…

在mysql中怎么样添加唯一约束_mysql怎么添加唯一约束?

方法:1、创建表时,使用“CREATE TABLE 表名(字段名 数据类型 UNIQUE);”语句来添加;2、修改表时,使用“ALTER TABLE 表名 ADD CONSTRAINT 唯一约束名 UNIQUE(列名);”语句来添加。 (推荐教程:mysql视频教程) MySQL 唯一约束(Unique Key)是指所有记录中字段的值不能重复出现…

添加唯一约束

– 1.添加唯一约束 – 方式1&#xff1a;创建表时指定 use mydb1; create table user1( id int, phone_number varchar(20)unique – 指定唯一约束 ); insert into user1 values(1001,‘123’); – insert into user1 values(1001,‘123’); --不是唯一会报错 – 在MySQL中&…

SQL Server 2012 唯一约束(定义唯一约束、删除唯一约束)

文章目录 准备知识定义唯一约束使用SSMS工具定义唯一约束使用SQL方式定义唯一约束方式一&#xff1a;在创建数据表的时候定义唯一约束方式二&#xff1a;修改数据表定义唯一约束 删除唯一约束使用SSMS工具删除唯一约束方式一&#xff1a;在对象资源管理器中删除唯一约束方式二&…