计算机组成原理与系统结构——多核计算机

笔记内容及图片整理自XJTUSE "计算机组成原理与系统结构" 课程ppt,仅供学习交流使用,谢谢。

多核处理器也称为芯片多处理器,将两个及以上处理器单元组合在一个芯片上。通常,每个内核都由独立处理器的全部组件构成,例如寄存器、ALU、流水线硬件、控制单元、L1指令和数据高速缓存。除了多内核之外,现代多核芯片还包括L2高速缓存和L3高速缓存。高度集成的多核处理器也包含了内存和外部控制器。

性能问题

增加并行性和复杂性

处理器设计中结构的改变主要侧重于利用ILP以便在每个时钟周期中完成更多工作,按时间顺序这些改变包括:

1)流水线------单个指令通过功能段流水线执行以便一条指令在流水线的一个段中执行时,另一条指令在该流水线的另一个段中执行

2)超标量------通过复制执行资源构成多条流水线,这避免了冒险,使得可以在并行流水线中并行执行指令

3)同步多线程SMT------扩展了寄存器组,保证多个线程可以共享使用流水线资源

能耗

随着单个芯片上晶体管数量和时钟频率的增加,功率需求呈指数级增长,随之而来的是用户成本增加和散热问题。Pollack经验法则:性能的提高大致与复杂性增加的平方根成正比,即若处理器内核的逻辑增加一倍,则它只能提供40%的性能提升。原则上随着内核数量增加,多核的使用可能提供近乎线性的性能改进(仅限于能够利用这一点的软件)。

下图是特征尺寸在逻辑/存储方面功率密度的变化情况:

常规多线程架构

多线程允许多个线程以重叠的方式共享CPU,CPU为每个线程维护一个独立的线程状态,常规多线程架构拥有单独的寄存器组、程序计数器和页表,还需要线程切换硬件。线程切换时间通常介于0.1~10个周期,过程切换时间通常介于100s~1000s。多线程架构分为细粒度多线程(一个线程在一个循环中执行)、粗粒度多线程(一个线程在多个周期内执行,仅在高代价时切换)、混合式(综合单线程和细粒度多线程)。

下图左表是细粒度多线程,右表是粗粒度多线程:

多核软件

许多应用程序还直接受益于随内核数量调整吞吐量的能力,多核处理器有以下几种应用:

1)多线程本机应用程序------线程级并行,特点是具有少量高度线程化的进程

2)多进程应用程序------进程级并行,特点是存在许多单线程化的进程

3)Java应用程序------Java虚拟机是一个多线程进程,为Java应用程序提供调度和存储管理

4)多实例应用程序------应用级并行,可通过并行运行多个实例从多核架构中获利,若多个应用程序实例需要某种程度的隔离,则可以使用虚拟化技术为每个应用程序实例提供它自己的独立且安全的区域。

多核组织结构

高速缓存的层级

(a)专用L1高速缓存组织结构,每个内核都有独立L1高速缓存,L1也是唯一片上缓存,其中L1区分为数据缓存和指令缓存。

(b)专用L2高速缓存组织结构,每个内核都有独立L1高速缓存和独立L2高速缓存,其中L1区分为数据缓存和指令缓存。

(c)共享L2高速缓存组织结构,每个内核都有独立L1高速缓存,内存共享L2高速缓存,其中L1区分为数据缓存和指令缓存。

(d)共享L3高速缓存组织结构,每个内核都有独立L1高速缓存和独立L2高速缓存,内存共享L3高速缓存,其中L1区分为数据缓存和指令缓存。

在芯片上使用共享的更高级高速缓存具有以下优点:

1)结构干涉可以降低整体缺失率,即若一个内核上线程访问一个主存位置,则将包含访问位置的数据行存入共享高速缓存,此时其他内核上的线程可以直接访问该数据行。

2)多核共享的数据不会在共享高速缓存级上复制。

3)通过适当的行替换算法,分配给每个内核的共享高速缓存量动态变化,因此局部性更少的线程可以使用更多的缓存。

4)通过共享内存位置,易于实现内核间通信。

5)使用共享高级缓存把高速缓存一致性问题限制在较低的缓存级,提升性能。

其中,片上只有专用L2高速缓存的组织结构能保证每个内核更快访问其私有L2高速缓存,从而利于具有强局部性的线程。

相关推荐
时间之城39 分钟前
笔记:记一次使用EasyExcel重写convertToExcelData方法无法读取@ExcelDictFormat注解的问题(已解决)
java·spring boot·笔记·spring·excel
灏瀚星空1 小时前
用Obsidian四个插件打造小说故事关联管理系统:从模板到图谱的全流程实践
经验分享·笔记·开源
一只可爱的小猴子1 小时前
2022李宏毅老师机器学习课程笔记
人工智能·笔记·机器学习
孞㐑¥1 小时前
C++11介绍
开发语言·c++·经验分享·笔记
使一颗心免于哀伤2 小时前
《重构》笔记摘录 - 9.处理继承关系
笔记
再睡一夏就好2 小时前
Linux常见工具如yum、vim、gcc、gdb的基本使用,以及编译过程和动静态链接的区别
linux·服务器·c语言·c++·笔记
俺的图图呢?2 小时前
Django笔记——CSRF
笔记·django·csrf
我的golang之路果然有问题2 小时前
快速了解redis,个人笔记
数据库·经验分享·redis·笔记·学习·缓存·内存
无心水3 小时前
【Java面试笔记:基础】8.对比Vector、ArrayList、LinkedList有何区别?
java·笔记·面试·vector·arraylist·linkedlist
卡皮巴拉爱吃小蛋糕3 小时前
MySQL的MVCC【学习笔记】
数据库·笔记·mysql