1.课程简介

现代多核处理器允许我们进行并发编程,以同时对一个或多个任务同时进行处理。

然而,一个N核的处理器进行任务处理并不代表拥有N倍的处理速度。并发编程存在的问题可以简单分为:

  • Communication Cost:多核间存在交流成本。

  • Work Imbalance:当负载不均时存在木桶效应。

并发编程主要考虑的问题有:

  • 如何合理的对任务进行拆分
  • 如何给处理器分配任务
  • 如何尽可能减少处理器间的交流成本

除了考虑上层的编程,硬件的原理学习也是必要的,这是因为并发的实现依赖于硬件的底层特性。

最后,快不等于利用率高,如何充分的利用资源更加重要。

2.程序与处理器

处理器本质就是一连串的指令,而处理器就是重复取出指令并执行的过程。

更具体地,为每一个程序(进程),处理器会维护一个程序计数器PC,用于指向将要处理的指令。

处理器取出PC指向的指令到指令寄存器中,然后将PC指向下一个指令,重复上述过程。

3.Instruction level parallelism

对于一个程序而言,如果它拥有一些互不相干的指令,就可以能将这些指令并行的运行。

超标量(superscalar)试图在一个周期内取出多条指令并行执行,并且是乱序的。通过内置多条流水线同时执行多个处理,本质是通过空间换取时间。

然而由于指令之间的相关性、依赖性,超标量的性能约为一个周期执行1.2条指令。为了而为了取得这20%的性能改善,超标量CPU需要增加大量的硬件电路来调度这些同时取出的指令,比如寄存器重命名,预约站,重排序缓冲区等。

对于程序遇到分支的情况,处理器采用了分支预测技术。处理器会预测程序的走向,并提前执行预测的分支的相关指令。如果预测失败,则返回分支点重新执行指令,否则可以直接利用已经计算好的结果。