Mechanisms used to implement abstractions efficiently
这里说的是「计算机系统里实现抽象的机制」。抽象就是我们写程序时看到的接口或功能,而底层需要硬件去实现。
Performance characteristics of implementations
不同的硬件实现方式会直接影响性能(比如:多核 CPU vs GPU vs 分布式集群,通信速度、内存带宽差异很大)。
Design trade-offs: performance vs. convenience vs. cost
在设计硬件和系统时,通常要做取舍:
Why do I need to know about hardware?
因为硬件特性真的很重要
比如:如果 CPU 和内存之间通信很慢,那么即使算法再好,性能也会被拖慢。(前面提到的 demo 里可能演示过通信延迟的问题。)
因为你关心效率和性能
你在写并行程序,目标通常就是「更快」。要达到这一点,就必须知道底层硬件如何调度、通信、共享资源,否则写出来的程序可能效率低甚至更慢。
一台有 10 个处理器 的电脑,如果你的程序只加速了 2 倍,那其实效率很低。
程序员的视角
硬件设计师的视角
👉 可以理解成「看说明书,知道下一步要干嘛」。
👉 可以理解成「工人的工作台」,放着原料(输入数据)和成品(结果)。
👉 就是「真正做事的工人」,执行加减乘除、逻辑判断等。
处理器能够在一个时钟周期里同时发射(dispatch)多条独立指令到不同的执行单元(ALU/乘法器/加法器等),并行执行它们。
ld r0, mem[r2] ; 把内存[mem[r2]]的数据加载到寄存器r0
ld r1, mem[r3] ; 把内存[mem[r3]]的数据加载到寄存器r1
add r0, r0, r1 ; r0 = r0 + r1
add
指令依赖前两条指令加载的数据。ld
完成,才能执行 add
。