本文
主要介绍多核体系结构,包括多核体系结构的由来,以及多和体系结构中的几大关键技术。
版本 | 说明 |
---|---|
0.1 | 初版发布 |
参考
名称 | 作者 | 来源 |
---|---|---|
《多核体系结构概览》 | 赵老师 | 培训 |
专业术语与缩略语
缩写 | 全称 | 说明 |
---|---|---|
什么是多核体系结构
-
处理器设计的几大目标:
- 功能
- 性能
- 功耗
- 成本
- 其他
-
如何实现上述目标:体系结构
- 冯诺依曼体系结构:存储、程序、计算、控制
- Tomasulo算法、多发射、分支预测、预期、SIMD …
为什么需要多核体系结构
-
如何提高汽车产量?
- 流水线技术、多部件同时组装、优化配合
- 还能怎么做?多条生产线、多个工厂、批量化零件生产
-
怎么提高计算机系统性能?
- 提高单个处理器核的性能:并行性、局部性、可预测性;边际效应递减,功耗和面积的开销加大
- 还能怎么做?使用多个处理器核同时计算
- 为什么多核能提高性能?线程间的并行性
- 另一个促进因素:工艺技术的提高,可容纳更多晶体管资源
-
SoC:更高的集成度
- MCU、I/O、DSP、GPU、Crypto…
一个典型的ARM多核系统
ARM N1 hyperscal reference design
ARM N1 Floorplan View
多核体系结构关键问题
- 如何把多核连接起来?
- 如何保持一个统一的存储视图?
- 如何减少访存延迟?
- 如何控制中断在多个核之间的派发?
- I/O子系统
- 调试子系统
- 电源管理子系统
如何把多核连接起来
-
采用什么样的连接方式?
- 总线:链路负载重、带宽低
- XBar:带宽高、可扩展性差
- 交换式:Ring、Mesh
-
数据如何传输?
- 数据在相邻两个节点之间的可靠传输:链路层
- 数据在任意两个节点之间的可靠传输:网络层
- 设备节点间的高层语义模型(共享存储、消息传输):协议层
-
关键问题:
- Order的保证
- 死锁的避免
- 拥塞的控制
如何保持一个统一的存储视图
-
每个core都有自己的cache,怎么保证不同core间的cache内容不冲突?
- core0修改,core1不修改,core1是否能看到core0对x的修改?
- core0和core1都修改,会不会出现core0认为x=1,core1认为x=0的情况?
-
怎么可靠的通过共享存储在两个核之间传输数据?
- core0先写data,然后置flag=1,;core1先检查flag,然后读data;对硬件设计有什么影响?
- core0写x=1,core1看到了x=1并通知了core2,core2看到的x一定是1吗?
怎么减小访存延迟?
- 告诉缓存 cache
- 局部性:时间局部性和空间局部性
- cache自身也存在访问延迟和容量之间的权衡
- 使用多级cache,取得最小平均延迟
- 各级存储层次的带宽平衡问题
中断的派发
-
中断是一种slave主动向master发信息的方式
- 使能、优先级、中断状态管理、虚拟化
- Level Sensitive、Edge Triggered、Message Based
-
和单核系统的不同之处:
- 如何在多核之间派发中断?
- 如何避免一个核总是不响应中断?
- 如何防止多个核响应同一个中断?
I/O子系统
-
主要包含两类:
- On-Chip device:UART、I2C …
- PCI-Express subsystem
-
两个方向的通路:
- Master to Slave:PIO
- Slave to Master:DMA、Interrupt
-
主要的问题:
- Order:PIO order、PCIE order/deadlock
- I/O virtualization
调试子系统
-
软件写错了,如何调试?
- 暂停处理器执行:断点、观察点、单步执行
- 观察内部状态:读写寄存器、读写Memory
-
CPU硬件会定义相应的支持机制:
- 上述暂停机制、观察机制
- 调试器向CPU发送命令的通路
电源管理子系统
- 在某些组件闲置时将其降频、关时钟或断电,以节省功耗
- 监测机制:CPU核空闲,NoC接口空闲
- 控制机制:被控制组件和电源控制器间的握手协议
- 执行机制:PLL频率调节,电源关断
文章原创,可能存在部分错误,欢迎指正,联系邮箱 cao_arvin@163.com。