总结一些第四章和第五章的一些关键信息
Chapter 4 处理器体系结构
在硬件中,寄存器直接将它的输入和输出线连接到电路的其他盆。
在机器级变成中,寄存器代表的是 CPU
中为数不多的可寻址的字,这里的地址是寄存器的 ID
。这些字通常都存在寄存器文件中,虽然我们会看到硬件有时
可以直接将一个字从一个指令传到另一个指令,以避免先写寄存器文件再读出来的延迟。
-
寄存器(
Register
):
寄存器是CPU内部的小型、快速的存储单元。
它们用于存储指令、数据、地址等信息,以便快速访问和处理。
寄存器通常用于临时存储操作数、中间计算结果、地址等。
寄存器可以被看作是CPU内部的“工作区”,用于执行算术和逻辑运算。 -
寄存器文件(
Register File
):
寄存器文件是一组寄存器的集合,它们被组织在一起,形成一个存储结构。
寄存器文件通常包含多个寄存器,每个寄存器都有一个唯一的标识符或编号。
寄存器文件允许CPU通过寄存器的编号来访问和操作这些寄存器。
寄存器文件是CPU内部的一个物理结构,它实现了寄存器的物理存储和访问。
简单来说,寄存器是单个的存储单元,而寄存器文件是这些寄存器的集合。寄存器文件提供了一个结构化的方式来管理和访问多个寄存器。在CPU的设计中,寄存器文件是实现寄存器存储和访问的关键组件。
将处理组织成阶段
- 取指(
fetch
): 取指阶段从内存读取指令字节,地址为程序计数器(PC
)的值。 - 译码(
decode
): 译码阶段从寄存器文件读入最多两个操作数,得到值valA
和valB
。通常,它读入指令rA
和rB
字段指明的寄存器,不过有些指令是读寄存器%rsp
的。 - 执行(
execute
): 在执行阶段,算数/逻辑单元(ALU
)要么执行指令指明的操作,计算内存引用的有效地址,要么增加或减少栈指针,这个阶段会检验条件和传送条件,如果条件成立,则更新目标寄存器。 - 访存(
memory
): 访存阶段可以将数据写入内存,或者从内存读出数据。 - 写回(
write back
): 写回阶段最多可以写两个结果到寄存器文件 - 更新
PC
(PC update
): 将PC
设置成下一条指令的地址。
在计算机体系结构中,CPI(Cycles Per Instruction)
是一个重要的性能指标,它表示执行一条指令所需的时钟周期数。CPI是衡量计算机运算速度的一个指标,它与程序的编写、ISA指令集和计算机的架构有关。CPI
的值越低,意味着每条指令平均需要的时钟周期数越少,从而计算机的性能越高效。
Chapter 5 优化程序性能
1 g 00 0 m 00 0 k 000 = = 1 × 1 0 9 1_{g}000_{m}000_{k}000 == 1 \times 10^9 1g000m000k000==1×109
-
当表明一个系统有
4GHz
处理器,这表示处理器时钟运行频率为 4 × 1 0 9 4 \times 10^{9} 4×109个周期.每个始终周期的时间是始终频率的倒数。通常以纳秒(nanosecond
,1
纳秒的 1 0 − 9 10^{-9} 10−9秒)或皮秒(picosecond
,1
皮秒等于 1 0 − 12 10^{-12} 10−12秒)为单位.
一个4GHz
的时钟,其周期为0.25
纳秒或250
皮秒. -
在实际的处理器中,是同时对多条指令进行求值的,这个现象被称为指令级并行.但是存在两个下界描述了程序的最大性能
- 延迟界限:在下一条指令开始之前,这条指令必须结束
- 吞吐量界限: 处理器功能单元的原始计算能力。这个界限是程序性能的终极限制
-
SIMD
是"Single Instruction, Multiple Data"
的缩写,最新版本为AVX (advanced vector extension)
,指用单条指令对整个向量数据进行操作。具备特殊的寄存器,比如长为512
位长64
字节的寄存器,每个寄存器都可以存放8
个64
位数,16
个32
位数。(一般长4
个或8
个字节,分别对应32
位和64
位机器) -
在
CPU
架构中,CPE(Cycles Per Element)
是一个衡量处理器性能的指标,它表示处理器执行特定计算任务时,每个数据元素所需的平均时钟周期数。CPE
值越低,意味着处理器处理数据的效率越高。CPE
的计算公式为:CPE = Total Cycles / Number of Elements
,其中Total Cycles
是执行任务所需的总时钟周期数,Number of Elements
是处理的数据元素数量。
CPE
值通常不会低于0.5
,这主要是因为现代处理器的设计和工作方式。在执行计算任务时,即使是最简单的操作,如加载数据、执行算术操作或存储结果,也会涉及到多个时钟周期。例如,一个简单的浮点加法可能就需要多个周期来完成,包括取指令、执行指令、访存等步骤。此外,现代处理器的流水线和超标量设计允许在一个时钟周期内开始多条指令的执行,但这并不意味着每个元素的处理可以在一个时钟周期内完成。