《深入理解计算机系统》第1周

第一章主要是以helloworld程序为切入点对计算机系统整体进行阐述,硬件和软件如何通过协同操作来运行应用程序。对于编译链接的流程和基本概念比较熟悉所以本章主要记录以下两点笔记:

Amdahl定律:

当对系统的某个部分进行加速时,整体性能的影响取决于该部分的重要性和加速程序。该定律主要用于并行计算领域预测多个处理器时的理论最大加速比,实际场景中程序往往并不能有效的利用多核,因为系统中不可避免的会存在一些需要串行访问的资源。因此在多核处理器中还要考虑如何降低串行计算部分的比例以及降低交互开销。

Concurrency和parallelism:

线程级并发:
单处理器系统中并发是通过进程执行切换来模拟出并发的效果,允许多用户同时与系统交互。随着多核处理器的出现减少了执行多个任务时模拟并发的需要,但是要求程序以多线程方式进行编写来高效地并行执行。

另外,超线程允许一个CPU执行多个控制流的技术,常规的处理器大约需要2w个时钟周期做线程切换,超线程处理器可以在单个周期的基础上决定执行哪个线程(FMT,通过拉长每个线程的平均执行时间来实现随时切换,英伟达和AMD的GPU中用的比较多)。现实中绝大多数程序并不会占用CPU的所有资源,超线程的引入主要就是为了更好得利用空闲资源。

指令级并行:

每条指令从开始到结束大约需要20+个时钟周期,但是处理器通过流水线技术,将指令划分为不同的阶段通过并行操作能够达到每个时钟周期2-4个指令的执行速率。

单指令多标量并行SIMD:

通过特殊的硬件来支持一条指令产生多个可以并行的操作。

这些应该都是本科学习过的知识点,重新温习了一遍。