多核处理器
发展动力
未来需求——性能需求永远无法终止;
杀手应用:
线延迟:如果串行达到1Tflop/s,芯片大小不能超过1.3mm,每个字约占3平方埃,或一个小原子的大小;
发热问题:
漏电流:
制造成本:摩尔第二定律
摩尔定律:
提高性能的手段:提高时钟频率;执行优化指令级并行(ILP);
线程级并行(TLP)
同步多线程(SMT)--英特尔超线程:提供更多的资源-执行上下文(context),如果遇到访存长延迟,可以立刻利用空闲资源;
芯片多处理(CMP)--多核处理器:
减少了资源竞争关系--同时使用资源;
需要显式多线程编程;
并发与并行:
并发:单个处理器运行多个进程
并行:
结构
基本思路:
- 使用更多晶体管增加更多简单的核,而不是增加处理器复杂度;
- SIMD思路:单指令多数据,减少指令流调度的开销;
CPU:
- Big Caches;
- Few Threads;
- 依赖于Cache和预取(Prefeching);
GPU
- Small Caches;
- Many Threads;
- 依赖于多线程;
现代处理器
- 采用更多核心(简单的核心):支持线程级并行而不是指令集并行;
- 将指令流处理分配在多个ALU(SIMD):以很少的额外成本增加计算能力;
- 使用多线程更有效地利用处理资源(隐藏延迟,填充所有可用资源);
编程
挑战--Where are the threads?
- 让程序员写线程程序--困惑
- 自动并行化--不可能,但可以改进
- 使用线程模块;
硬件支持:
- 推断都线程
- 数据驱动的推断
- 硬件线程支持--轻量级同步
事务存储器
解决数据同步问题。
两个事务要具有原子性:
- 记录对变量的操作(Cache),将中间数据保存在缓冲区;
- 确保没有数据冲突(Cache coherence):恢复状态;提交状态(Processor&caches);
IBM X10
对多核系统和集群系统提供统一的支持
高生产率:
- 语言设计注重可以执行和安全性
性能:
- 扩展了Java虚拟机
- 提供手工性能调整手段
在Java语言基础上开发
- 继承了Java语言的核心价值--高生产率,可移植性,成熟,安全
推测多线程:
没有数据依赖关系的代码段可以提前执行;
定位程序中可以有效并行执行的部分
- 预计算片具有较低的计算开销
- 工作负载平衡,A与B差别不应太大
预计算片的低开销
内存层次结构中的缓冲和多版本控制
- 缓冲将保持推测状态,直到线程被验证并可以提交;
- 多版本控制允许每个变量对并行运行的每个线程有不同的值;
快速检查数据依赖的错误推测