计算机体系结构基础知识介绍之线程级并行性及其利用

线程级并行(Thread Level Parallelism,TLP)是指在多个处理器或多个核心上同时执行多个线程,从而提高程序的性能和吞吐量。线程级并行的基本原理是利用程序中的数据或任务的并行性,将程序划分为若干个相对独立的子任务,分配给不同的线程执行,然后通过同步机制协调线程之间的数据依赖和通信。

线程具有状态和当前程序计数器,但线程通常共享单个进程的地址空间,允许线程轻松访问同一进程内其他线程的数据。 多线程是一种多线程共享处理器而不需要中间进程切换的技术。 线程之间快速切换的能力使得多线程能够用于隐藏管道和内存延迟。

多线程允许多个线程以重叠的方式共享单个处理器的功能单元。 相比之下,利用线程级并行性 (TLP) 的更通用方法是使用具有多个同时并行运行的独立线程的多处理器。 然而,多线程并不像多处理器那样复制整个处理器。 相反,多线程在一组线程之间共享大部分处理器核心,仅复制私有状态,例如寄存器和程序计数器。

线程级并行有两种主要的实现方式:

- 硬件多线程(Hardware Multithreading):这种方式是在处理器硬件层面上支持多个线程的并发执行,即一个处理器可以同时拥有多个程序计数器(PC)和寄存器堆,从而在一个时钟周期内执行多条指令。硬件多线程又分为两种类型:

  1.     - 细粒度多线程(Fine-Grained Multithreading):这种类型是指每个时钟周期切换一个线程,从而隐藏流水线中的停顿(stall)。例如,当一个线程遇到缓存不命中或分支错误预测时,处理器就可以切换到另一个就绪的线程继续执行,而不需要等待缓存填充或分支解析。这样可以提高处理器的利用率和吞吐量,但是每个线程的延迟会增加。主要缺点是它会减慢单个线程的执行速度,因为准备好执行而不会停顿的线程将被其他线程的指令延迟。
  2.     - 粗粒度多线程(Coarse-Grained Multithreading):这种类型是指只有当一个线程遇到长时间的停顿(例如访问主存或I/O设备)时才切换到另一个线程。这样可以减少线程切换的开销和频率,提高每个线程的性能,但是对于短时间的停顿无法隐藏,粗粒度多线程有一个主要缺点:它克服吞吐量损失的能力有限,尤其是较短的停顿。。
  3. - 同时多线程(SMT)。 同步多线程是细粒度多线程的一种变体,当细粒度多线程在多问题、动态调度的处理器之上实现时,就会自然出现。 与其他形式的多线程一样,SMT 使用线程级并行性来隐藏处理器中的长延迟事件,从而提高功能单元的使用率。 SMT 的关键见解是寄存器重命名和动态调度允许执行来自独立线程的多个指令,而不考虑它们之间的依赖关系; 依赖关系的解决可以通过动态调度能力来处理。

- 超标量处理器(Superscalar Processor):这种方式是指在一个处理器内部集成多个功能部件(如算术逻辑单元、浮点单元、加载/存储单元等),从而在一个时钟周期内执行多条指令。超标量处理器需要使用复杂的指令调度和寄存器重命名技术来解决指令之间的数据依赖和资源冲突。超标量处理器可以实现指令级并行(Instruction Level Parallelism,ILP),也可以结合硬件多线程技术实现线程级并行。

下图 从概念上说明了以下处理器配置的处理器利用超标量资源的能力的差异:

 

下面是一个使用超标量处理器来实现线程级并行的例子:

假设我们有一个双发射(dual-issue)超标量处理器,它可以在每个时钟周期内发射两条指令,并且支持两个硬件线程。假设我们有以下两个线程:

```
Thread 0:              Thread 1:
LD R1, 0(R2)           LD R5, 0(R6)
ADD R3, R1, R4         SUB R7, R5, R8
ST R3, 0(R2)           ST R7, 0(R6)
```

如果只有一个线程在运行,那么它需要6个时钟周期才能完成,如下所示:

```
Cycle  Thread 0
1      LD R1, 0(R2)
2      stall (waiting for load result)
3      ADD R3, R1, R4
4      ST R3, 0(R2)
5      stall (waiting for store address)
6      stall (waiting for store data)
```

如果两个线程同时运行,并且交替发射指令,那么它们只需要4个时钟周期就能完成,如下所示:

```
Cycle  Thread 0        Thread 1
1      LD R1, 0(R2)    LD R5, 0(R6)
2      stall           SUB R7, R5, R8
3      ADD R3, R1, R4  ST R7, 0(R6)
4      ST R3, 0(R2)    stall
```

可以看出,线程级并行可以有效地利用处理器的资源,提高程序的性能和吞吐量。

 

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网络数据安全风险评估实施指引(一)

近日,全国信息安全标准化技术委员会发布了《网络安全标准实践指南 网络数据安全风险评估实施指引》(TC260-PG-20231A v1.0-202305),旨在响应《数据安全法》要求,落实重要数据处理过程风险评估,衔接已发布的…

DBeaver设置主题

一、下载包 帮助-》Install new software Eclipse Update Site 勾选一直下一步,直到安装完,会提示重启,重启设置主题即可 二、设置主题 窗口-》首选项-》DevStyle

【技术指南】3D转换工具HOOPS Exchange的功能特征和典型使用场景全解析(一)

一、什么是 HOOPS Exchange? HOOPS Exchange 是一组软件库,可以帮助开发人员在开发应用程序时读取和写入主流的 2D 和 3D 格式。HOOPS Exchange 支持 在主流的3D 文件格式中读取 CAD 数据,并支持将 3D 数据转换为 PRC 数据格式,…

eclipse : sun.misc.BASE64Encoder找不到jar包的解决方法

sun.misc.BASE64Encoder找不到jar包 比较好的解决办法 按顺序依次操作: Windows -> Preferences -> Java -> Compiler -> Errors/Warnings。再按照顺序依次: Deprecated and trstricted API -> Forbidden reference (access rules): -&g…

2023京东防暑消暑市场分析:冷风扇、移动空调等硬核防暑产品火爆

今年夏天,高温天气频发,各种防暑类产品也向多场景延伸,不少行业、类目都因此高速增长,包括防暑类电器、防晒用品、小型户外避暑神器等。 *高温刺激下,防暑类家电需求暴涨 在夏季高温的刺激下,空调、风扇等等…

LabVIEW-模拟传感器采集数据并预测数据

一、题目 已知某传感器过去的一段时间内采集的数据为d1,d2,d3,......,dn,现欲以m点的数据宽度,预测 tao 步后的数据值,即将一维的时间序列数据重构为如下m1列的形式: d(1) d(2 ) ....... d(m), d(mtao) d(2) d(…

k8s 查看程序日志输出

总是和k8s大交道,把相关的命令也学习一下 查看程序日志输出: kubectl logs -f ce202307130100024-gy-decision-xkygl-64f795ff7b-mtr67 --tail1000 不重定向的情况下,可以把多进程下的日志都输出出来。挺好用的 kubectl logs -f pod --tailxx…

【计算机组成与体系结构Ⅰ】实验7 IP核的使用、D触发器

一、实验目的 1:学会设计用IP核和原理图的方式设计电路,完成涉及1位数据的2选1多路选择器。 2:设计带异步置零和写使能端的D触发器。 二、实验环境 软件:Vivado 2015.4操作系统:Windows 10 三、实验内容 2.2.1 多路…

Mysql:常见的面试题和答案

1. 数据库事务的特性? 原子性:即不可分割性,事务要么全部被执行,要么就全部不被执行。一致性或可串性。事务的执行使得数据库从一种正确状态转换成另一种正确状态隔离性。在事务正确提交之前,不允许把该事务对数据的任…

Python django开发

第一步:创建开发环境 mkvirtualenv py2_django 第二步:安装django pip install django2.2.5 # 选择2.2.5的原因是这个版本是持久维护的 pip list # 查看安装的信息 第三步:start 一个项目,并创建子应用 cd ~/Myproject # 选择…

系统调用与函数调用有什么区别?

本文我们来聊聊系统调用与普通的函数调用之间的区别。 作为程序员你肯定写过无数的函数,假设有这样两个函数: void funcB() {} void funcA() { funcB();} 函数之间是可以相互调用的,这很简单很happy有没有。 要知道是代码、是函数就可以相…

软件测试要学习哪些技术才能月入15K

目录 前言 一、Linux必备知识 二、Shell脚本 三、互联网程序原理 四、Mysql数据库 五、抓包工具 六、接口测试工具 七、Web自动化测试Java&Pyhton 八、接口与手机自动化 九、敏捷测试&TestOps构建 十、性能测试&安全测试 总结: 前言 我一直…