跳转至

期末复习

阅读信息

441 字  12 分钟  本页总访问量 加载中...

单精度中 bias 怎么取?

Bias 等于 \(2^{E-1}-1\), 其中 \(E\) 表示指数位数。Bias 将指数范围 1~\(2^E-1\) 映射为近似以 0 为中间分界点。

E.g.

one type of float is: 1 bit sign,5 bit exponent,10 bit fraction.

  • Bias: 2^4-1=15
  • Min exponent: 1-15=-14
  • Max exponent: (2^5-1)-1-15=15

十进制小数转浮点数?

单、双精度的格式:

浮点数类型 符号位 指数 尾数 bias
单精度 1 8 23 127
双精度 1 11 52 1023

特殊情况:

类型 符号位 指数 尾数 说明
0 x 0 0 符号位决定是+0 还是-0
非规格化数 x 0 非 0 此时隐含的前导位是 0 而非 1
无穷大 x 1111_1111 0 符号位决定是 \(+\infty\) 还是 \(-\infty\)
NaN x 1111_1111 非 0 NaN 包括 0.0/0.0,\(\sqrt{-1}\)\(\infty -\infty\)

十进制小数转浮点数的过程:

判断符号位 → 整数部分、小数部分转为二进制 → 移动小数点至 1.xx → 移动小数点的数值 + bias 得到指数 → 指数前补 0、尾数后补 0,补到相应位数 → 组合成浮点数

整数转二进制:除 2 取余,从下到上排序
小数转二进制:乘 2 取整,从上到下排序

十进制小数加法:

分别转为二进制 → 指数对齐,统一化为更大的指数 → 尾数相加 → 规范化为 1.xx 格式 → 去点隐含 1,判断舍入误差 → 判断溢出和特殊值 → IEEE 754 表示

指数对齐时,指数小的数的尾数需右移,用 guard, round, sticky 三个位保留,其中 G 和 R 为直接右移得到,S 为后面所有位的或。

判断舍入:GRS 位表示的数大于等于 0.5 则加一,小于 0.5 则不加一。(示例为 0.5*ulp,其中 ulp 为保留的浮点数最后一位表示的数值。)

情况 条件 处理方式
指数上溢(overflow) 规格化后指数 > 254 结果置为 ±∞
指数下溢(underflow) 规格化后指数 < 1 结果置为 ±0 或 次正规数
结果为 0 符号相反、尾数相等 → 完全抵消 结果 ±0
无穷参与运算 ±∞ ± 有限数 / ±∞ ± ±∞ 视情况得 ±∞ 或 NaN
NaN(非数)参与运算 操作数有 NaN 或 ∞–∞ 结果为 NaN

指数下溢情况:

若 E 仍在 [–22, 0] 范围:尾数右移(产生次正规数 subnormal):E'=0, M'=原尾数右移(1–E)位,保持符号不变。
若 E<0 太多:尾数右移到全 0,结果为 ±0

无穷大情况:

操作 结果
(+∞) + (有限数) +∞
(–∞) + (有限数) –∞
(+∞) + (–∞) NaN
(±∞) + (±∞)(同号) ±∞

IEEE 754 特殊值运算?

NaN 包括:无穷加减、零除以零、零乘无穷、负数开方、包含 NaN 的任何运算。浮点数表示时,指数全 1、尾数非零。

Infinity 包括:非零数除以零。浮点数表示时,指数全 1、尾数为 0。

CPU 和 I/O 的处理?

  • Polling:CPU 发起 IO,并反复检查设备状态,一直等到 IO 完成。不并行。
  • Interrupt:CPU 发起 IO,IO 在后台进行,直到完成后发中断,CPU 处理中断;IO 进行过程中 CPU 执行原任务。并行。
  • DMA:CPU 配置 DMA,DMA 控制器在设备和内存见传输数据,CPU 在此期间执行别的指令。并行。

cache 中 block 大小的影响?

  • 增大 conflict miss:cache 容量一定,block 变大,cache 中的 block 数变小,miss 增加。
  • hit time 略上升:block 中数据更多,选择、传输的时间增加。
  • 增加 miss panelty:block 增大,miss 时要搬运的 data 更多。
  • 减小 compulsory miss:compulsory miss 指某个数据块第一次被访问时不在缓存中而导致的 miss。Block 大,一次 miss 将更多相邻地址带进 cache,compulsory miss 更小。

磁盘访问时间计算?

注意点:

  1. 转速单位 RPM 表示 Rotation Per Minute,每分钟圈数。
  2. 计算 Rotational latency 时,用转半圈的时间表示。
  3. 传输时间等于扇区在磁头下“经过”的时间,而这个时间由旋转速度决定。

E.g.

seek time=8ms,转速7200RPM,每track有1000个sector,计算access time。


  • Seek time: 8ms
  • Rotational latency: 1/(7200/60) * 0.5 = 8.33ms
  • Transfer time: 1/(7200/60) / 1000 = 0.00833ms
  • Total time: 12.18ms

页表大小计算?

本地编译和转化?

C 代码转 RISCV:

Bash
riscv64-unknown-elf-gcc -O1 -c -march=rv64gc -mabi=lp64d ex.c -o ex.o && riscv64-unknown-elf-objdump -d ex.o

十进制小数转单精度浮点数:

Bash
1
2
3
4
5
6
7
8
python3 -q

import struct
x=-20.796875
bits=struct.unpack('>I', struct.pack('>f', x))[0]
print(f"res:{bits:032b}")

exit()

十进制小数转双精度浮点数:

Bash
1
2
3
4
5
6
7
8
python3 -q

import struct
x=-20.796875
bits=struct.unpack('>Q', struct.pack('>d', x))[0]
print(f"res:{bits:064b}")

exit()

不同数据类型的字节?

指令 全称 加载宽度 扩展方式 适用数据类型(C 语言示例) 典型用途 是否需地址对齐
lb Load Byte 1 字节 符号扩展 signed char, int8_t 读取有符号小整数(如 -5 存为 char 否(任意地址)
lbu Load Byte Unsigned 1 字节 零扩展 char(文本/ASCII), unsigned char, uint8_t 字符串、字节流、像素值、二进制数据 否(任意地址)
lh Load Halfword 2 字节 符号扩展 short, int16_t 读取有符号 16 位整数 是(2 字节对齐)
lhu Load Halfword Unsigned 2 字节 零扩展 unsigned short, uint16_t 无符号 16 位整数(如端口号) 是(2 字节对齐)
lw Load Word 4 字节 无扩展(直接加载) int, float, 指针(RV32) 通用 32 位整数或单精度浮点数 是(4 字节对齐)
ld Load Doubleword 8 字节 无扩展(直接加载) long(RV64), double, 指针(RV64) 64 位整数或双精度浮点数(仅 RV64) 是(8 字节对齐)

指令执行的延迟?

题目

4.7 本练习中的问题假设用于实现处理器数据通路的逻辑模块具有以下延迟:

I-Mem / D-Mem Register File Mux ALU Adder Single gate Register Read Register Setup Sign extend Control
250 ps 150 ps 25 ps 200 ps 150 ps 5 ps 30 ps 20 ps 50 ps 50 ps

“Register read”是指在时钟上升沿之后,新寄存器值出现在输出端所需的时间。此值仅适用于 PC(程序计数器)。“Register setup”是指寄存器的数据输入必须在时钟上升沿之前保持稳定的最短时间。该值同时适用于 PC 和寄存器文件。

4.7.1 [5] <§4.4> R 型指令的延迟是多少?(即:为确保该指令正确执行,时钟周期至少需要多长?)

4.7.2 [10] <§4.4> ld 指令的延迟是多少?

4.7.3 [10] <§4.4> sd 指令的延迟是多少?

4.7.4 [5] <§4.4> beq 指令的延迟是多少?

4.7.5 [5] <§4.4> I 型指令的延迟是多少?

4.7.6 [5] <§4.4> 此 CPU 所需的最小时钟周期是多少?

  • I-Mem:取指时间
  • D-Mem:内存读写时间
  • Register File:寄存器文件读取时间
  • Mux:多选器时间
  • ALU
  • Adder
  • Single Gate:(1)控制信号,branch && zero (2)跳转地址,立即数左移
  • Register Read:PC 读取(寄存器文件是异步读、同步写,这里只对 PC 读取有延迟)
  • Register Setup:寄存器写的时间,对 PC 和寄存器文件都有延迟(因为都是同步写)
  • Sign extend:Imm Gen 模块,将 32 位立即数扩展为 64 位所需的时间
  • Control:控制信号生成时间(同步进行)

R 型指令的延迟是多少?

\[ \begin{align*} Time=\,&RegRead + IMem + RegFile \\ &+ MUX(\text{decide the second input of ALU}) \\ &+ ALU + MUX(\text{decide the destination of ALU result}) + RegSetup\\ \end{align*} \]

ld 指令的延迟是多少?

\[ \begin{align*} Time=\,&RegRead + IMem + \begin{cases}RegFile \\ SignExtend\end{cases}\\ &+ MUX(\text{input of ALU})\\ &+ ALU + DMem(\text{read from mem})\\ &+ MUX(\text{destination of mem data}) + RegSetup\\ &=950ps\end{align*} \]

sd 指令的延迟是多少?

\[ \begin{align*} Time=\,&RegRead + IMem + \begin{cases}RegFile \\ SignExtend\end{cases}\\ &+ MUX + ALU + MUX\end{align*} \]

sd 中存储到 MEM 后没有输出 data,后面不用加 MUX

beq 指令的延迟是多少?

\[ \begin{align*} Time=\,&RegRead + IMem + \begin{cases}RegFile \\ SignExtend\end{cases}\\ &+ \begin{cases}SingleGate+Adder(\text{new PC}) \\ MUX+ALU(\text{compare rs1 and rs2})+SingleGate(\text{shift\,left\,1})\end{cases}\\ &+ MUX+Setup\end{align*} \]

I 型指令的延迟是多少?

略。

此 CPU 所需的最小时钟周期是多少?

最小时钟周期 = 最大的指令执行时间(单周期 CPU)

950ps