1、多核应用
- SMP
- AMP
- BAREMETAL
- hypervisor
SMP:在多个核上跑一个操作系统。
优点:核间负载平衡, 性能线性提升,
缺点: 应用程序的竞争条件,应用需要重新设计以利用多核能力,实时性不如AMP
AMP:在多个核上分跑不同或者相同的多个操作系统。
优点:可以使用不同的OS,冗余备份;OS性能高于SMP,更易于伸缩;错误隔离
缺点:应用需要为AMP重新设计;负载不能自动平衡
baremeal:有些核不跑操作系统,而是裸程序。
优点:提供了更高的性能;
缺点:开发环境支持少;设计代价更高;需要提供与OS和外部通信机制
hypervisor:
优点:能够在一个核上运行多个OS; 更稳定安全;OS通过优先级调度可以获得实时响应;快速负载自动平衡;
缺点:性能有百分之几的损失;
2、多核架构
以上两种架构区别在于L2是否共享,目前大部分架构是L2共享式。举个例子:
硬件上也存在同构与异构结构。
异构多核可以充分利用特定的处理器能力完成特定的任务。如数学运算核、通信核、图形核、通用核。目前我们使用的手机多为异型多核,可以查看手机规格手册。
片上多核之间有多种联接方式。
Shared BUS
Crossbar
Network on Chip(NOC)
共享总线型如下所示:
优点: 简单,易于实现;
缺点:不易伸缩
例如:MPC8541D
交叉互联:
优点: 并行互联,
缺点: 代价高,需要更多片上空间
例如:AMD Athlon
片上网络互联:
优点: 高度可伸缩,
缺点:复杂
例如:cavium cn38xx
一致性和非一致性内存访问 UMA/NUMA:以核访问内存时间是否一致决定
两种cache一致性协议:snoop与directory
每个核有个嗅探单元,监测总线事务,发现变化立马更改。
目录协议使用一个所有核可查的表来表示内存状态,每个核访问时查目录表。
3、并行设计机制
并行分为比特,指令,任务,数据级并行
为了提高并行,应尽量减少共享。
可以使用任务分解/划分;通信和同步;聚合;映射等方式实现。
将任务分成成多核并行运行的多个任务。
问题分解后就将串行指令集变成了并行执行的指令集。
问题分解可分成按数据与按功能:
使用粗粒度分解可以提高性能。
聚合:
task1与tas4之间,task2与task3之间无其它任务切换,则可以合并两个任务,实现粗粒度,提高性能。
4、并行设计模式与并行算法
由上图可以看出,编程串行度越高,并行执行速度越低。当串行度降低到50%以上时,再多的核心也无法显著提高性能。
那么如何量化并行?
ADG:任务无循环依赖图:
上面最大的并行度为3。
关键路径长度:
红色数据表示任务持续时间。
结论: 短的关键路径可以增加并发程度
并发level取决于: 并发程度和关键路径; 任务粒度