vault backup: 2026-07-04 12:43:14
This commit is contained in:
@@ -316,6 +316,8 @@ graph TB
|
|||||||
**计算公式**:
|
**计算公式**:
|
||||||
$$存储容量 = 存储单元数 \times 存储字长$$
|
$$存储容量 = 存储单元数 \times 存储字长$$
|
||||||
|
|
||||||
|
其中**存储单元数**是存储器中有多少个可寻址的位置(由地址线位数决定,如20位地址线→2²⁰个单元),**存储字长**是每个单元能存多少位数据(由数据线位数决定,如8位数据线→每单元8位)。
|
||||||
|
|
||||||
**单位换算**:
|
**单位换算**:
|
||||||
- 1KB = 1024B
|
- 1KB = 1024B
|
||||||
- 1MB = 1024KB
|
- 1MB = 1024KB
|
||||||
@@ -343,10 +345,16 @@ $$存储容量 = 存储单元数 \times 存储字长$$
|
|||||||
|
|
||||||
$$MIPS = \frac{主频}{CPI \times 10^6}$$
|
$$MIPS = \frac{主频}{CPI \times 10^6}$$
|
||||||
|
|
||||||
|
其中**主频**是CPU时钟频率(单位Hz,如2GHz=2×10⁹Hz),**CPI**是每条指令需要的时钟周期数,**10⁶**是将Hz转换为MHz的换算系数。MIPS表示每秒执行多少百万条指令。
|
||||||
|
|
||||||
$$CPI = \frac{时钟周期数}{指令条数}$$
|
$$CPI = \frac{时钟周期数}{指令条数}$$
|
||||||
|
|
||||||
|
其中**时钟周期数**是执行所有指令总共花费的时钟周期,**指令条数**是指令总数。CPI越小说明每条指令需要的周期越少,CPU效率越高。
|
||||||
|
|
||||||
$$执行时间 = CPI \times 指令条数 \times 时钟周期$$
|
$$执行时间 = CPI \times 指令条数 \times 时钟周期$$
|
||||||
|
|
||||||
|
其中**时钟周期**=1/主频(如主频2GHz→时钟周期0.5ns)。这个公式说明执行时间由三个因素决定:指令效率(CPI)、指令数量、和CPU速度(时钟周期)。
|
||||||
|
|
||||||
### 1.3.4 其他指标
|
### 1.3.4 其他指标
|
||||||
|
|
||||||
- **主频**:CPU时钟频率(GHz)
|
- **主频**:CPU时钟频率(GHz)
|
||||||
|
|||||||
@@ -199,9 +199,13 @@ graph TB
|
|||||||
|
|
||||||
$$存储容量 = 存储单元个数 \times 存储字长$$
|
$$存储容量 = 存储单元个数 \times 存储字长$$
|
||||||
|
|
||||||
|
其中**存储单元个数**是存储器中可寻址的位置总数(由地址线位数决定),**存储字长**是每个单元的位数(由数据线位数决定)。
|
||||||
|
|
||||||
**字节表示**:
|
**字节表示**:
|
||||||
$$存储容量 = 存储单元个数 \times 存储字长 / 8$$
|
$$存储容量 = 存储单元个数 \times 存储字长 / 8$$
|
||||||
|
|
||||||
|
除以8是因为1字节=8位,将位数转换为字节数。
|
||||||
|
|
||||||
> [!example] 示例
|
> [!example] 示例
|
||||||
> 24位地址线,按字节寻址:
|
> 24位地址线,按字节寻址:
|
||||||
> - 寻址范围:$2^{24} = 16M$ 个字节
|
> - 寻址范围:$2^{24} = 16M$ 个字节
|
||||||
@@ -241,6 +245,8 @@ graph LR
|
|||||||
**容量计算**:
|
**容量计算**:
|
||||||
$$芯片容量 = 2^{地址线位数} \times 数据线位数$$
|
$$芯片容量 = 2^{地址线位数} \times 数据线位数$$
|
||||||
|
|
||||||
|
其中**地址线位数**决定了能寻址多少个存储单元(n根地址线→2ⁿ个单元),**数据线位数**决定了每个单元能存多少位数据。
|
||||||
|
|
||||||
存储芯片就像一个小型仓库:地址线告诉仓库你要哪个格子的东西,数据线传送你拿到的东西,译码驱动根据地址找到对应的格子,存储矩阵是存放所有东西的格子,读/写电路控制是取东西还是放东西,片选线选择是哪个仓库。
|
存储芯片就像一个小型仓库:地址线告诉仓库你要哪个格子的东西,数据线传送你拿到的东西,译码驱动根据地址找到对应的格子,存储矩阵是存放所有东西的格子,读/写电路控制是取东西还是放东西,片选线选择是哪个仓库。
|
||||||
|
|
||||||
一个存储芯片有10根地址线和4根数据线:容量 = 2^10 x 4 = 1024 x 4 = 4096位 = 512字节。
|
一个存储芯片有10根地址线和4根数据线:容量 = 2^10 x 4 = 1024 x 4 = 4096位 = 512字节。
|
||||||
@@ -422,13 +428,17 @@ Cache就像办公桌上的常用文件架:你(CPU)找文件很快,但文
|
|||||||
**命中率**:
|
**命中率**:
|
||||||
$$H = \frac{N_c}{N_c + N_m}$$
|
$$H = \frac{N_c}{N_c + N_m}$$
|
||||||
|
|
||||||
|
其中 $N_c$ 为Cache命中次数(在Cache中找到数据的次数),$N_m$ 为Cache未命中次数(需要去主存取数据的次数),$H$ 的值在0~1之间,越接近1越好。
|
||||||
|
|
||||||
**平均访问时间**:
|
**平均访问时间**:
|
||||||
$$T_a = HT_c + (1-H)T_m$$
|
$$T_a = HT_c + (1-H)T_m$$
|
||||||
|
|
||||||
|
其中 $T_c$ 为Cache访问时间,$T_m$ 为主存访问时间,$H$ 为命中率。公式含义:命中时花 $T_c$ 时间,未命中时花 $T_m$ 时间,加权平均。
|
||||||
|
|
||||||
**访问效率**:
|
**访问效率**:
|
||||||
$$e = \frac{T_c}{T_a} = \frac{1}{H + (1-H)r}$$
|
$$e = \frac{T_c}{T_a} = \frac{1}{H + (1-H)r}$$
|
||||||
|
|
||||||
其中 $r = T_m / T_c$(主存与Cache访问时间之比)
|
其中 $r = T_m / T_c$(主存与Cache访问时间之比,$r$ 越大说明主存越慢,Cache的价值越大)。$e$ 越接近1说明Cache效果越好。
|
||||||
|
|
||||||
> [!example] 示例
|
> [!example] 示例
|
||||||
> Cache命中率95%,Cache访问时间10ns,主存访问时间100ns:
|
> Cache命中率95%,Cache访问时间10ns,主存访问时间100ns:
|
||||||
@@ -609,7 +619,7 @@ Windows的虚拟内存系统:主存是电脑的8GB内存,辅存是硬盘上
|
|||||||
|
|
||||||
$$带宽 = \frac{数据总线宽度}{存取周期} = \frac{32位}{200ns} = 160M位/秒 = 20MB/s$$
|
$$带宽 = \frac{数据总线宽度}{存取周期} = \frac{32位}{200ns} = 160M位/秒 = 20MB/s$$
|
||||||
|
|
||||||
**解题思路**:带宽 = 数据总线宽度 / 存取周期。注意位和字节的换算:160M位/秒 = 160/8 MB/s = 20MB/s。这道题的关键是记住公式并注意单位换算,避免混淆位(bit)和字节(Byte)。
|
其中**数据总线宽度**是每次存取的数据位数(本题32位=4字节),**存取周期**是连续两次存取的最小时间间隔(本题200ns)。注意位和字节的换算:160M位/秒 = 160÷8 MB/s = 20MB/s。
|
||||||
|
|
||||||
### 真题2:Cache组相联映射(作业原题)
|
### 真题2:Cache组相联映射(作业原题)
|
||||||
|
|
||||||
|
|||||||
@@ -29,6 +29,8 @@
|
|||||||
**表示范围**(n位):
|
**表示范围**(n位):
|
||||||
$$0 \sim 2^n - 1$$
|
$$0 \sim 2^n - 1$$
|
||||||
|
|
||||||
|
其中 $n$ 为二进制位数。比如16位无符号数范围:0 ~ 2¹⁶-1 = 0 ~ 65535。
|
||||||
|
|
||||||
> [!example] 示例
|
> [!example] 示例
|
||||||
> 16位无符号数:0 ~ 65535
|
> 16位无符号数:0 ~ 65535
|
||||||
|
|
||||||
@@ -57,9 +59,13 @@ $$0 \sim 2^n - 1$$
|
|||||||
**整数原码**:
|
**整数原码**:
|
||||||
$$[x]_{原} = \begin{cases} 0,x & 2^n > x \geq 0 \\ 2^n - x & 0 \geq x > -2^n \end{cases}$$
|
$$[x]_{原} = \begin{cases} 0,x & 2^n > x \geq 0 \\ 2^n - x & 0 \geq x > -2^n \end{cases}$$
|
||||||
|
|
||||||
|
其中 $x$ 为真值,$n$ 为数值部分位数(不含符号位)。正数原码直接在符号位填0后跟数值;负数原码符号位填1,数值部分为 $2^n - x$(即模减去真值的绝对值)。
|
||||||
|
|
||||||
**小数原码**:
|
**小数原码**:
|
||||||
$$[x]_{原} = \begin{cases} x & 1 > x \geq 0 \\ 1 - x & 0 \geq x > -1 \end{cases}$$
|
$$[x]_{原} = \begin{cases} x & 1 > x \geq 0 \\ 1 - x & 0 \geq x > -1 \end{cases}$$
|
||||||
|
|
||||||
|
正小数原码就是本身;负小数原码为 $1-x$(即1减去真值,等价于1加上绝对值)。
|
||||||
|
|
||||||
> [!example] 示例
|
> [!example] 示例
|
||||||
> - x = +1110 → [x]原 = 0,1110
|
> - x = +1110 → [x]原 = 0,1110
|
||||||
> - x = -1110 → [x]原 = 1,1110
|
> - x = -1110 → [x]原 = 1,1110
|
||||||
@@ -87,9 +93,13 @@ $$[x]_{原} = \begin{cases} x & 1 > x \geq 0 \\ 1 - x & 0 \geq x > -1 \end{cases
|
|||||||
**整数补码**:
|
**整数补码**:
|
||||||
$$[x]_{补} = \begin{cases} 0,x & 2^n > x \geq 0 \\ 2^{n+1} + x & 0 > x \geq -2^n \end{cases}$$
|
$$[x]_{补} = \begin{cases} 0,x & 2^n > x \geq 0 \\ 2^{n+1} + x & 0 > x \geq -2^n \end{cases}$$
|
||||||
|
|
||||||
|
其中 $x$ 为真值,$n$ 为数值部分位数。正数补码和原码相同;负数补码为 $2^{n+1} + x$(即模 $2^{n+1}$ 加上真值,等价于原码取反加1)。8位补码的模是 $2^8 = 256$。
|
||||||
|
|
||||||
**小数补码**:
|
**小数补码**:
|
||||||
$$[x]_{补} = \begin{cases} x & 1 > x \geq 0 \\ 2 + x & 0 > x \geq -1 \end{cases}$$
|
$$[x]_{补} = \begin{cases} x & 1 > x \geq 0 \\ 2 + x & 0 > x \geq -1 \end{cases}$$
|
||||||
|
|
||||||
|
正小数补码就是本身;负小数补码为 $2+x$(模为2,即取反加1)。
|
||||||
|
|
||||||
> [!example] 示例
|
> [!example] 示例
|
||||||
> - x = +1010 → [x]补 = 0,1010
|
> - x = +1010 → [x]补 = 0,1010
|
||||||
> - x = -1010 → [x]补 = 2^5 + (-1010) = 100000 - 1010 = 1,0110
|
> - x = -1010 → [x]补 = 2^5 + (-1010) = 100000 - 1010 = 1,0110
|
||||||
@@ -112,9 +122,13 @@ $$[x]_{补} = \begin{cases} x & 1 > x \geq 0 \\ 2 + x & 0 > x \geq -1 \end{cases
|
|||||||
**整数反码**:
|
**整数反码**:
|
||||||
$$[x]_{反} = \begin{cases} 0,x & 2^n > x \geq 0 \\ (2^{n+1}-1) + x & 0 \geq x > -2^n \end{cases}$$
|
$$[x]_{反} = \begin{cases} 0,x & 2^n > x \geq 0 \\ (2^{n+1}-1) + x & 0 \geq x > -2^n \end{cases}$$
|
||||||
|
|
||||||
|
其中 $x$ 为真值,$n$ 为数值部分位数。正数反码和原码相同;负数反码为 $(2^{n+1}-1)+x$,等价于原码除符号位外每位取反。反码是补码减1(补码=反码+1)。
|
||||||
|
|
||||||
**小数反码**:
|
**小数反码**:
|
||||||
$$[x]_{反} = \begin{cases} x & 1 > x \geq 0 \\ (2-2^{-n}) + x & 0 \geq x > -1 \end{cases}$$
|
$$[x]_{反} = \begin{cases} x & 1 > x \geq 0 \\ (2-2^{-n}) + x & 0 \geq x > -1 \end{cases}$$
|
||||||
|
|
||||||
|
其中 $n$ 为小数部分位数。负小数反码为 $(2-2^{-n})+x$,即 $1.111...1$(n个1)加上真值。
|
||||||
|
|
||||||
> [!example] 示例
|
> [!example] 示例
|
||||||
> - x = +1101 → [x]反 = 0,1101
|
> - x = +1101 → [x]反 = 0,1101
|
||||||
> - x = -1101 → [x]反 = 1,0010
|
> - x = -1101 → [x]反 = 1,0010
|
||||||
@@ -135,6 +149,8 @@ $$[x]_{反} = \begin{cases} x & 1 > x \geq 0 \\ (2-2^{-n}) + x & 0 \geq x > -1 \
|
|||||||
**整数移码**:
|
**整数移码**:
|
||||||
$$[x]_{移} = 2^n + x \quad (-2^n \leq x < 2^n)$$
|
$$[x]_{移} = 2^n + x \quad (-2^n \leq x < 2^n)$$
|
||||||
|
|
||||||
|
其中 $x$ 为真值,$n$ 为数值部分位数,$2^n$ 是偏移量。移码=补码符号位取反,本质是把所有数都加上偏移量变成正数,这样直接比较二进制大小就能比较真值大小。8位移码偏移量为128。
|
||||||
|
|
||||||
> [!example] 示例
|
> [!example] 示例
|
||||||
> - x = +1010 → [x]移 = 1,1010
|
> - x = +1010 → [x]移 = 1,1010
|
||||||
> - x = -1010 → [x]移 = 0,0110
|
> - x = -1010 → [x]移 = 0,0110
|
||||||
|
|||||||
@@ -190,15 +190,21 @@ graph TB
|
|||||||
**吞吐率**(单位时间完成的指令数):
|
**吞吐率**(单位时间完成的指令数):
|
||||||
$$TP = \frac{n}{k + (n-1)}$$
|
$$TP = \frac{n}{k + (n-1)}$$
|
||||||
|
|
||||||
其中 $n$ 为指令条数,$k$ 为流水线段数,每段假设时间相同为 $\Delta t$。当各段时间不同时,吞吐率受限于最慢的段:
|
其中 $n$ 为指令条数,$k$ 为流水线段数,每段假设时间相同为 $\Delta t$。分母 $k+(n-1)$ 是完成n条指令所需的时钟周期数(第一条需要k个周期建立流水线,之后每条只需1个周期)。当各段时间不同时,吞吐率受限于最慢的段:
|
||||||
$$TP_{max} = \frac{1}{\max(\Delta t_i)}$$
|
$$TP_{max} = \frac{1}{\max(\Delta t_i)}$$
|
||||||
|
|
||||||
**加速比**(非流水线时间 / 流水线时间):
|
其中 $\max(\Delta t_i)$ 是所有流水线段中最长的执行时间,它决定了流水线的时钟周期下限。
|
||||||
|
|
||||||
|
**加速比**(不使用流水线的时间 / 使用流水线的时间):
|
||||||
$$S = \frac{nk}{k + (n-1)}$$
|
$$S = \frac{nk}{k + (n-1)}$$
|
||||||
|
|
||||||
|
其中分子 $nk$ 是不用流水线时n条指令各需k段串行执行的总时间,分母是流水线方式的总时间。$S$ 越大说明流水线加速效果越好,理想极限为 $k$(段数)。
|
||||||
|
|
||||||
**效率**(流水线各段的利用率):
|
**效率**(流水线各段的利用率):
|
||||||
$$E = \frac{S}{k} = \frac{n}{k + (n-1)}$$
|
$$E = \frac{S}{k} = \frac{n}{k + (n-1)}$$
|
||||||
|
|
||||||
|
其中 $S$ 为加速比,$k$ 为段数。效率=加速比/段数,表示流水线中每个段的平均利用率。$E$ 越接近1越好。
|
||||||
|
|
||||||
流水线性能像工厂的生产效率:吞吐率是单位时间完成的任务数,加速比是流水线比非流水线快多少倍,效率是流水线的利用率。
|
流水线性能像工厂的生产效率:吞吐率是单位时间完成的任务数,加速比是流水线比非流水线快多少倍,效率是流水线的利用率。
|
||||||
|
|
||||||
假设流水线有4个阶段,执行100条指令:吞吐率100/(4+99)=0.97条/周期,加速比100×4/(4+99)=3.88,效率3.88/4=97%。
|
假设流水线有4个阶段,执行100条指令:吞吐率100/(4+99)=0.97条/周期,加速比100×4/(4+99)=3.88,效率3.88/4=97%。
|
||||||
|
|||||||
Reference in New Issue
Block a user