目录
说明:只是作为一个索引笔记,具体的优化实现方法要结合书籍。
第1章 计算机系统漫游
编译系统:
hello.c(文本文件)----编译器---->hello,o(可重定位的目标文件)-----链接器---->hello(目标文件)
字是被设计为在系统总线上传输的字节块。根据不同的操作系统,x86-32系统中一个字等于4个字节,而x86-64位系统中一个字等于8个字节。
CPU处理器中的程序计数器(PC)—用来指向主存中的某条机器语言指令,并让cpu执行。
操作系统的内核 -----是操作系统代码常驻主存的部分。
系统调用即应用程序通过操作系统提供的函数接口,让操作系统的内核执行某种操作。
虚拟内存—为每个进程提供了一个假象,即每个进程都在独占地使用主存。每个进程看到的内存都是一致的,称为虚拟地址空间。把一个进程虚拟内存的内容存储在磁盘上,然后用主存作为磁盘的高速缓存。
第2章 信息的表示和处理
字节:一个字节等于8位,是内存寻址的最小单位。
字:每台计算机都有一个字长,字长决定的是虚拟地址空间的最大大小。
虚拟内存地址就是机器级编程的物理内存地址的映射。
如果是32位操作系统,一个字是4个字节,虚拟地址空间的最大大小就是2^32。32位字长限制了虚拟地址空间的大小为4G
如果是64位操作系统,一个字是8个字节,虚拟地址空间的最大大小就是2^64。64位字长限制了虚拟地址空间的大小为16EB(16GG)。
typedef—给数据类型命名的方式,提高了代码的可读性。
第3章 程序的机器及表示(讲汇编的)
X86----CPU的机器指令架构,目前得到广泛应用的指令集。
第4章 处理器体系结构(讲CPU的)
第5章 优化程序性能
5.1 优化编译器的能力和局限性
影响编译器优化性能的因素:一、 内存引用。二、函数调用
内联函数替换优化函数的调用,减少内存引用
5.2 表示程序的性能
循环展开(即循环步长相对设置比1长,减少循环的次数)
5.4 消除循环的低效率
代码移动 (即对每次循环中不变的量,代码用全局变量存储,减少每次循环的重复调用)
5.5 减少过程调用
消除循环中的函数重复调用no
5.6 消除不必要的内存引用
引入临时变量
以上是通过程序编写改进代码,接下来结合硬件特性来改进代码
5.8 循环展开
循环展开的程序要结合处理器的寄存器个数,例如x86-64有16个YMM寄存器,一旦循环变量的数量超过了可用寄存器的数量,程序就必须在栈上分配一些变量。可能导致程序的性能反而下降。
5.9 提高并行性
5.9.2 重新结合变换
通过改变运算的顺序,在底层机器实现上也会对性能进行提升。
第6章 存储器层次结构
局部性原理:CPU获取存储层次较高的数据时,所需的时钟周期越少。所以所编写的程序访问数据时,应尽可能访问层次较高的结构这样才是局部性较好的程序。
6.1存储技术
静态RAM(SRAM)—层次更高,速度更快,价格更高
动态RAM(DRAM)—层次稍低,速度略慢,价格稍低
存储结构:
CPU寄存器-----L1高速缓存(SRAM)----L2高速缓存(SRAM)----L3高速缓存(SRAM)----主存(DRAM)----固态硬盘(闪存等)
缓存命中:当CPU需要一个存储器中的数据时,在他的高速缓存中找到了这个数据的副本,称为缓存命中,比直接去低级的存储器读取速度更快。