二次型矩阵一定是实对称的
实对称矩阵同一特征值的特征向量记得正交化
幂级数求和函数要注意无定义点
分布函数F(x)充要条件
- F(x)单调不减
- F($-\infty$) = 0;F($+\infty$) = 1
- F(x)右连续
密度函数f(x)充要条件
- f(x) >= 0
- ${\int_{-\infty}^{+\infty}f(x)dx = 1}$
参数方程求函数形态要将 t 转化为 x
三角万能代换:$t = tan\frac{x}{2}$
二维正太分布
$$
\frac{1}{2πσ_1σ_2\sqrt{1-ρ^2}}e^{-\frac{1}{1-ρ^2}(\frac{(x-μ1)^2}{2σ_1^2}-\frac{(x-μ_1){(y-μ_2)}}{σ_1σ_2}ρ + \frac{(y-μ2)^2}{2σ_2^2})}
$$柯西积分不等式
$$
[\int^b_af(x)g(x)dx]^2 <= \int^b_af^2(x)dx\int^b_ag^2(x)dx \
[\int^b_af(x)dx]^2 <= \int^b_af^2(x)dx\int^b_adx = (b-a)\int^b_af^2(x)dx
$$海伦公式
$$
S = \sqrt{p(p-x)(p-y)(p-z)},其中周长为2p
$$三向量共面:a×b·c = 0
点到直线距离公式
$$
点(x_0,y_0,z_0)到直线\frac{x-x_1}{l}=\frac{y-y_1}{m}=\frac{z-z_1}{n}\
d = \frac{|(x_0-x_1, y_0-y_1, z_0-z_1) × (l, m, n)|}{|(l,m,n)|}
$$异面直线距离公式
$$
L_1的方向向量为e_1,L_2的方向向量为e_2,M_1和M_2为L_1和L_2上的点\
d = \frac{|e_1×e_2·M_1M_2|}{|e_1×e_2|}
$$方向导数
函数不可微不能使用偏导求方向导数,只能回归定义式!
$$
\frac{\partial f}{\partial l}|{(x_0,y_0,z_0)}=\lim{t \to 0^+}\frac{f(x_0+tcosα, y_0+tcosβ, z_0+tcosγ) - f(x_0,y_0,z_0)}{t}\
其中(cos\alpha, cos\beta, tcosγ)是l的方向余弦
$$r(A) + r(B) <= r(AB) + n,其中 n 为 A 的列数或 B 的行数
AB的列向量可以由A的列向量表示;AB的行向量可以由B的行向量表示
左乘列满秩,秩不变;右乘行满秩,秩不变
伽马函数
$$
\int_{0}^{+\infty}\sqrt{x}e^{-x}dx = \frac{\sqrt{\pi}}{2}\
\int_{0}^{+\infty}\frac{1}{\sqrt{x}}e^{-x}dx = \sqrt{\pi}
$$一致估计量
*
$$
\lim_{n\to\infty} E\hat\theta = \theta\
\lim_{n\to\infty} D\hat\theta = 0
$$- 若 $\hat\theta$ 是 $\theta$ 的一致估计量,则 $f(\hat\theta)$ 也是 $f(\theta)$ 的一致估计量(不可用于无偏估计)
方差的矩估计量
$$
\frac{1}{n}\sum^n_{i=1}(X_i-\overline X)^2
$$Ax=b 有解 => b能被A的列向量组线性表出
未命名
一、程序转换过程
1、 预处理
对#include、#define等语句进行处理,预处理后仍然是高级语言
2、 编译
将高级语言编译为对应的汇编语言或机器语言(可重定位文件)
3、 汇编
将汇编语言汇编成对应的机器语言(可重定位文件)
4、 链接
将多个可重定位文件链接成一个可执行文件,确定逻辑地址
5、 装入
将可执行文件从磁盘装入内存中,确定物理地址
二、多模块存储器
1、 同时启动方式
(1)存储体个数为m
(2)总线宽度 = m * 每个存储体的存储字
(3)存储周期 T = 总线周期 t
2、 轮流启动方式
(1)存储体个数为m
(2)总线宽度 = 每个存储体的存储字
(3)存储周期 T = 总线周期 t * m
存储周期和存储时间没有必然关系,只有存储周期 > 存储时间
三、常用公式
OF = 最高位进位 ^ 次高位进位
CF = 最高位进位 ^ Sub
进位产生函数 = AiBi
进位传递函数 = Ai ^ Bi
Cache—主存系统访问效率 = 访问Cache的时间 / 平均访存时间
四、进程的内存映像
进程的内存映像一般包括以下五个要素
- 代码块:即程序的二进制代码和常量,二者都是只读的
- 数据段:包括全局变量和静态变量
- PCB:存放在系统区
- 堆:用于存放动态分配的变量,例如通过malloc分配的地址空间
- 栈:用于实现函数调用,存放临时变量和实参传递
五、应用软件和系统软件
系统软件:操作系统、数据库管理系统、语言处理程序、分布式软件系统、网络软件系统、标准库程序、服务性程序等。
应用软件:数据库系统等用户为解决某个特定应用领域而编制的程序。
六、循环移位
不管移位是否带进位位,CF中永远保存被移出的那一位。
七、定点数的乘除运算
移位 | 加减 | |
---|---|---|
原码乘法 | n | n |
补码乘法(Booth) | n | n+1 |
原码除法(不恢复余数法) | n | n+1或n+2 |
补码除法(加减交替法) | n | n+1 |
其中n为真值在二进制下小数的位数。
八、IEEE浮点数
(1)特殊情况(float)
阶码 | 尾数 | 值 | |
---|---|---|---|
零 | 0 | 0 | $±0$ |
无穷大 | 255 | 0 | $±\infty$ |
非规格化数 | 0 | f≠0 | $±2^{-126} * 0.f$ |
非数 | 255 | f≠0 | NaN |
(2)浮点数格式
数符 | 阶码 | 尾数 | 总位数 | 偏置值 | |
---|---|---|---|---|---|
短浮点数 | 1 | 8 | 23 | 32 | 127 |
长浮点数 | 1 | 11 | 52 | 64 | 1023 |
临时浮点数 | 1 | 15 | 64 | 80 | 16383 |
九、整数类型转换
大字长转小字长:高位截断,低位保留
小字长转大字长:若原数是无符号数,则进行零拓展;若原数是有符号数,则进行符号拓展。
例如 short -> unsigned int,现将short符号拓展成32位,再用无符号数的规则解释这个数。
十、SRAM和DRAM
SRAM:集成低、容量小、位价高、功耗高、存取速度块、非破坏性读出、不需要定时刷新
DRAM:集成高、容量大、位价低、功耗低、存取速度慢、破坏性读出、需要定时刷新
SRAM只需一根片选线,地址线正常。
DRAM采用地址复用技术,需要一根行选通线和一根列选通线,但地址线减半。
DRAM刷新
- 集中刷新:指定一段固定时间用于集中刷新
- 分散刷新:将一个存取周期分成两部分,前半部分用于读写,后半部分用于刷新,加长了系统的存取周期,降低系统的速度。
- 异步刷新:用刷新周期除以行数算出时间 t,每隔 t 时间刷新一行。
十一、磁盘冗余阵列
RAID是指将多个独立的物理磁盘组成一个独立的逻辑盘,数据在多个物理盘上交叉存储、并行访问,具有更好的存储性能、可靠性和安全性。
- RAID0:无冗余和无校验,性能最好
- RAID1:镜像复制,双倍冗余
- RAID2:采用纠错的海明码
- RAID3:位交叉奇偶校验
- RAID4:块交叉奇偶校验
- RAID5:分布式奇偶校验
十二、固态硬盘
基于闪存技术,属于ROM只读存储器,读写以页为单位,擦除以块为单位(块>页)
十三、Cache写策略
(1)写命中
- 全写法:同时写入Cache和主存
- 写回法:新增脏位,只写入Cache,当该Cache块被换出时将数据写回主存
(2)写不命中
- 写分配法:从主存中调块到Cache,更新Cache
- 非写分配法:只写入主存,不调入Cache
全写法和非写分配法使用,写回法和写分配法使用
十四、虚拟存储器
(1)虚拟存储机制采用全相联映射和回写法。
(2)TLB中的标记字段始终是完整的虚拟页号。
(3)Cache缺失由硬件完成,缺页处理由软件完成,TLB缺失既可以用硬件处理也可以用软件处理。
(4)Cache纯硬件实现,对所有程序员透明;虚拟存储器由硬件和OS共同实现,对系统程序员不透明,对应用程序员透明。
十五、ISA体系结构
指令系统是ISA中最核心的部分,ISA完整定义了软件和硬件之间的接口,为汇编程序员所熟悉。
ISA规定了指令格式,数据类型及格式,操作数的存放方式,程序可访问的寄存器、存储空间的大小和编址方式,寻址方式,指令执行过程的控制方式等。
十六、寻址方式
(1)间接寻址
一次间接寻址的寻址范围要比多次间接寻址的寻址范围要大,因为多次间接寻址需要一位额外的标志位来表明当前主存块中的内容是否是操作数的有效地址(0表示有效地址)
间址周期用于取出操作数的有效地址,寄存器间接寻址也有间址周期!
(2)偏移量寻址
- 相对寻址
- 用于转移指令
- 基址寻址
- 用于多道程序设计
- 对汇编程序员不可见
- 基址寄存器既可以用专用寄存器,也可以用通用寄存器
- 面向操作系统
- 程序执行过程中,基址寄存器内容不可变,形式地址可变
- 编址寻址
- 用于循环程序,处理数组问题
- 对应用程序员可见
- 面向用户
- 程序执行过程中,变址寄存器内容可变,形式地址不可变
(3)堆栈寻址
硬堆栈(寄存器)
软堆栈(内存)
EBP栈底指针,ESP栈顶指针
十七、RISC和CISC
CISC | RISC | |
---|---|---|
指令系统 | 复杂 | 精简 |
指令数目 | 多 | 少 |
指令字长 | 不定长 | 定长 |
可访存指令 | 不限制 | 仅有Load和Save指令 |
指令执行时间 | 相差较大 | 一般一个时钟周期 |
指令使用频度 | 相差较大 | 均匀 |
通用寄存器个数 | 少 | 多 |
目标代码 | 难以优化编译 | 可进行优化编译,生成运行高效的代码 |
控制方式 | 微程序控制 | 硬布线控制(组合逻辑控制) |
指令流水线 | 可不实现 | 必须实现 |
边界对齐 | 可不实现 | 通常实现 |
十八、CPU基本结构
(1)组合逻辑元件
不具备存储功能,如三态门、多路选择器、加法器、算术逻辑单元、译码器等。
(2)状态元件
具有存储功能,如程序计数器,累加寄存器等。
(3)数据通路
数据在功能部件之间传送的路径被称为数据通路,包括算术逻辑单元、通用寄存器、状态寄存器、异常和中断处理逻辑等。数据通路由控制部件控制。
(4)内部总线
内部总线连接同一部件内的部件,系统总线连接同一台计算机系统的各部件。
十九、指令周期
(1)一个指令周期中所包含的机器周期可以不等,一个机器周期中所包含的时钟周期也可以不等。
(2)若不采用间址寻址则没有间址周期;若没有中断请求,则没有中断周期。
(3)工作周期分为取指周期、间址周期和执行周期,没有中断周期。
(4)中断周期仅仅只包含硬件执行部分,即关中断、保存断点、引入中断向量。
(5)CPU周期 = 机器周期,机器周期一般等于存取周期。
(6)单指令周期,指令执行过程中控制信号不变,每个部件使用一次,指令之间串行执行
(7)多指令周期,指令执行过程中控制信号可变,每个部件使用多次,指令之间也是串行执行的
二十、CPU控制方式
CPU控制方式用于确定微操作序列的执行过程。
(1)同步控制方式
控制信号来自统一的时钟信号(时钟信号以最长的微操作序列为基准),控制电路简单,但运行速度慢
(2)异步控制方式
通过应答方式进行联络,控制电路复杂,但运行速度快
(3)联合控制方式
二者的折中,大部分采用同步控制方式,小部分采用异步控制方式
二十一、总线定时
(1)同步定时方式
采用统一的时钟信号,总线周期长度固定,传输速率高,总线控制逻辑简单,可靠性差,适用于总线长度较短的系统
(2)异步定时方式
通过握手信号实现定时控制,总线周期长度可变,传输速率低,总线控制逻辑复杂。
- 全互锁:三次握手
- 半互锁:两次握手
- 不互锁:udp
二十二、微程序
一条机器指令对应一段微程序
一段微程序包含多条微指令
一条微指令包含多条微命令
一条微命令对应一个微操作
微周期是执行一条微指令多需要的时间,通常为一个时钟周期
n条机器指令,至少有n+1段微程序(1个公共取值微程序,n个执行微程序),可以没有间址/中断微程序
(1)微指令的编码方式
直接编码方式:n个微命令要求就有n位操作字段。
字段直接编码方式:将互斥微命令放在同一字段,每个字段要预留一位表示不发出任何命令。
字段间接编码方式:某个字段的译码输出需要依赖另一个字段的译码输出,可进一步缩短微指令字长,但同时削弱了微指令的并行控制能力。
(2)微指令的格式
水平型微指令
上述三种编码方式都属于水平型微指令。一条水平型指令可以定义并执行多种并行的基本操作。微指令字较长但微程序短。
优点:微程序短,执行速度快。
缺点:微指令长,编写微程序麻烦。
垂直型微指令
一条水平型指令只能定义并执行一种基本操作。微指令字较短但微程序长。
优点:微指令短,简单,规整,便于编写微程序。
缺点:微程序长,执行速度慢,工作效率低。
混合型微指令
介于上述两者之间。
二十三、指令流水线
(1)流水线定义
指令流水线一般分为如下五段:
- 取指(IF)
- 取出指令
- PC + 1
- 译码(ID)
- 指令译码,并根据 IR 中寄存器地址访问通用寄存器,读出所需的操作数
- 执行(EX)
- Load/Store:计算访存有效地址
- Reg-Reg指令:ALU根据上一步读出的数据进行运算
- Reg-Imm指令:ALU根据上一步读出的数据和指令中给出的立即数进行运算
- 分支指令:计算转移目标的地址,并根据上一步读出的操作数判断分支是否成功
- 访存(MEM)
- 该周期仅处理访存指令和分支指令
- Load:从存储器中读出相应的数据
- Store:将数据写入存储器
- 分支指令:若分支成功,则将转移目标地址送入PC
- 写回(WB)
- ALU:将计算结果送入寄存器
- Load:将从存储器中读出的数据送入寄存器
(2)流水线的冒险和处理
结构冒险:由于多条指令在同一时刻争夺同一资源而形成的冲突
- 令后一条相关指令暂停一个时钟周期
- 单独设置数据存储器和指令存储器
数据冒险:由于下一条指令会使用到当前指令计算出的结果而形成的冲突
- 令后续相关指令暂停一至几个时钟周期,可分为硬件阻塞(stall)和软件插入(NOP)
- 采用数据旁路技术,直接将前一条ALU的结果作为当前ALU一端的输入开始计算
- 通过编译器进行指令编译优化
控制冒险:由于转移指令而形成的冲突
- 分支预测
- 预取转移成功和不成功两个控制流上的目标指令
- 加快和提前形成条件码
- 提高转移方向的预测率
(3)高级流水线技术
- 多发射技术
- 超标量流水线技术(动态多发射技术)
- 需要配置多个功能部件
- 每个时钟周期内可并发多条独立指令,以并行操作方式将两条或多条指令编译并执行
- 超长指令字技术(静态多发射技术)
- 需要多个处理部件
- 将多条能并行执行指令合成一条具有多个操作码字段的超长指令字。
- CPI < 1
- 超标量流水线技术(动态多发射技术)
- 超流水线技术
- 调高流水线主频的方式提升流水线性能
- CPI = 1
二十四、多处理器
单指令流单数据流(SISD)
- 包含一个处理器和一个存储器
- 顺序串行执行指令
单指令流多数据流(SIMD)
- 数据级并行
- 包含一个指令控制部件和多个处理单元
- 可用户矩阵运算和for循环处理数组
多指令流多数据流(MISD)
- 不存在这种架构的计算机
多指令流多数据流(MIMD)
线程级及以上并行
多计算机系统
多处理器系统(共享内存多处理器 SMP)
同一存储访问多处理器(UMA)
- 访存时间与哪儿个处理器提出访问请求及请求哪儿个字无关
非统一存储访问多处理器(NUMA)
每个CPU都有独立的内存控制器,都独立连接到一部分内存
CPU直连的部分被称为本地内存
访问本地内存快于访问远程内存
二十五、硬件多线程
在支持硬件多线程的CPU(可以是单核或者单CPU)中,必须为每个线程提供单独的通用寄存器组、程序计数器等。
细粒度多线程
多个线程之间交叉执行指令
CPU能在每个时钟周期切换进程
指令级并行
粗粒度多线程
- 仅在线程出现阻塞才切换线程
- 线程切换的开销比细粒度大
- 指令级并行
同时多线程
- 指令级并行 + 线程级并行
- 在同一时钟周期中,发送多个不同线程中的多条指令执行
二十六、中断响应判优
- 不可屏蔽中断 > 内部异常 > 可屏蔽中断
- 内部异常中,硬件故障 > 软件中断
- DMA终端请求 > IO设备的中断请求
- IO设备中断中,高速设备 > 低速设备;输入设备 > 输出设备;实时设备 > 普通设备
Speechgpt
多模态
1. CLIP
数据集总共 400M 图片文本对,使用对比学习的方式训练模型。匹配的图片文本对 Ti 和 Ii 记为正样本,不匹配的图片的文本对 Ti 和 Ij 记为负样本。我们要让正样本的余弦相似度接近1,负样本的余弦相似度接近-1。
通过引入额外的 alt-text 信息,使得模型拥有 open-vocabulary 的能力,在预测的过程中没有种类的约束。只需要把要预测的种类带入到 prompt 中(A photo of a {object}),与要预测的图片算余弦相似度,相似度最高的即为预测结果。
- 余弦相似度:$cos\theta=\frac{a·b}{||a||*||b||}$
伪代码
1 | # image_encoder - ResNet or Vision Transformer |
2. FLIP
FLIP 借鉴了 Bert 中 Mask Language Modeling 的思想,对图片的 patch 进行高比率的 mask,而仅仅只编码可见的patch。FLIP并不会对图像进行重建任务!
mask的比率越高,模型训练的时间越短,同时在同等epoch下正确率较原方法也会有一定的提升(此处50%正确率最高)。由此可以看出,大量的负样本可以提升模型的性能(mask比率高,batch_size就可以增大,相应的负样本也就增多了)。
消融实验
3. MAE
和FLIP有些类似,先对原图像进行 mask,然后仅对未 mask 的图像进行编码。不同的是,MAE对编码后的向量按序加入 mask 标记再进行解码。预训练完成后,仅使用 encoder 进行识别任务。
实验结果和FLIP吻合,高 masking ratio 会带来高正确率。
消融实验
4. ALIGN
和CLIP基本差不多,最显著的不同就是,CLIP使用的数据经过较复杂的人为清洗(400M),而ALIGN直接使用符合网络分布的图像文本对(1.8B)。
5. K-LITE
使用外部知识,例如 WordNet 和 Wiktionary 来扩充文本。
1 | "I like eating apple" |
6. LaCLIP
使用 LLM 对图片描述进行重写。
7. VirTex
使用文本监督信号来让 Visual Backbone 更好地提取图像信息。与 CLIP 不同的是,VirTex 使用的是 Captioning Loss。
8. SimVLM
视觉部分参考了 ViT,将图片分割成块。不同的是,这里使用卷积层提取 patch 的特征而非一个简单的线性层,同时文本 embedding 和 图片的 embedding 一起输入到 encoder 中进行 gpt 的自回归预测任务。
9. Coca
伪代码
1 | # image, text.ids, text.labels, text.mask: paired {image, text} data |
10. ALBEF
模型架构和 Coca 的思路类似,但是 Coca 是从头开始预训练,ALBEF 直接使用的预训练模型。