1.课程简介
现代多核处理器允许我们进行并发编程,以同时对一个或多个任务同时进行处理。
然而,一个N核的处理器进行任务处理并不代表拥有N倍的处理速度。并发编程存在的问题可以简单分为:
Communication Cost:多核间存在交流成本。
Work Imbalance:当负载不均时存在木桶效应。
并发编程主要考虑的问题有:
- 如何合理的对任务进行拆分
- 如何给处理器分配任务
- 如何尽可能减少处理器间的交流成本
除了考虑上层的编程,硬件的原理学习也是必要的,这是因为并发的实现依赖于硬件的底层特性。
最后,快不等于利用率高,如何充分的利用资源更加重要。
2.程序与处理器
处理器本质就是一连串的指令,而处理器就是重复取出指令并执行的过程。
更具体地,为每一个程序(进程),处理器会维护一个程序计数器PC,用于指向将要处理的指令。
处理器取出PC指向的指令到指令寄存器中,然后将PC指向下一个指令,重复上述过程。
3.Instruction level parallelism
对于一个程序而言,如果它拥有一些互不相干的指令,就可以能将这些指令并行的运行。
超标量(superscalar)试图在一个周期内取出多条指令并行执行,并且是乱序的。通过内置多条流水线同时执行多个处理,本质是通过空间换取时间。
然而由于指令之间的相关性、依赖性,超标量的性能约为一个周期执行1.2条指令。为了而为了取得这20%的性能改善,超标量CPU需要增加大量的硬件电路来调度这些同时取出的指令,比如寄存器重命名,预约站,重排序缓冲区等。
对于程序遇到分支的情况,处理器采用了分支预测技术。处理器会预测程序的走向,并提前执行预测的分支的相关指令。如果预测失败,则返回分支点重新执行指令,否则可以直接利用已经计算好的结果。