CSAPP Note chap4 & chap 5

CSAPP Note chap4 & chap 5

CSAPP 读书笔记系列chap4 & chap 5

chap4 处理器体系结构

这章说的是如何设计一个简单的处理器(Y86-64)的步骤,包括异常的处理,简单的指令跳转处理。

感觉这里说的不够详细,有点泛,个人认为更详细的可以看计算机系统概论
这本,里面有设计CPU指令的硬件和dataflow。

不过,开卷有益的思想,这里主要是理解Y86的原型(X86)的流水线模型。

 流水线的通用原理

流水线的一个特性是提高了系统的吞吐量(throughput),类比单位时间内服务的顾客总数,即服务一个用户所需的时间。

  • 吞吐量描述:GIPS(每秒千兆条指令)

处理器的实现一般使用HDL硬件描述语言Verilog,恰巧毕设的另外几个同学做的是这一块,到时候具体可以观摩一下。

另外,一般对处理器设计来说,其性能分析一般是由CPI(Cycles Per Instruction,每指令周期数)来衡量,其定义为流水线平均吞吐量的倒数,注意其时间单位为时钟周期而非微微秒

另外流水线的一般步骤为:

  • 取指(fetch): 从内存读取指令字节,地址为程序计数器PC的值

  • 译码(decode): 将取值得到的指令得到相应的目标指令、寄存器以及操作数

  • 执行(execute): 将操作送到ALU,可以计算一些结果和设置一些条件码

  • 访存(memory): 将数据写入内存write或从内存读入数据load

  • 写入(write back): 将(最多两个)接过 写到寄存器文件中

  • 更新PC(PC update): 将PC设置成下一条指令的地址

总体来说,Chap4 看的很快,课程计划上也没有这章,以后用到再翻吧。

chap5 优化程序的性能

以前一直听说程序就等于数据结构加上算法,似懂非懂的,读完这章可能才算理解这句话。对于一个程序,编译器会在很多方面帮助我们去优化程序的性能。例如编译器会有一些优化(gcc的优化程度: -Og -> O1(默认)->O2 ->O3);但这些相对来说都是tricky,程序真正重要的部分还得程序员去完成。

例如下面的一个程序(n-gram 其对一个文档中出现的n单词的序列进行统计,例如当n = 1时,统计每个单词的次数;当n= 2 时,统计两个单词连续的词组例如“I am ”的次数)剖析中(剖析具体可以下面再谈),需要的子函数调用的时间如下图

剖析图1

该程序运行时间为两百多秒,主要的花销在排序上Initial的插入排序上,但当插入排序换为内置的快排后,该程序的运行时间为6秒左右。如下:
剖析图2

更多的函数和数据结构这里不打算谈,这里说的是编译器的那些tricky吧,其实也为一些重要的编程习惯

表示程序的性能方法

表示程序的性能方法,这里采用的是每元素的周期数(CPE, Cycles Per Element),和CPI一样,其时间单位为时钟周期而非微微秒。一般来说,CPE越小越好

条例一,以const 和 内敛函数代替define 这部分也可以参考effective c++;

先定义一两个函数,再通过迭代来说明优化的步骤

#include <ctype.h>
#include <stdio.h>

// OP 的操作不同,比较加法和乘法的时间

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值