课程笔记计算机体系结构复习笔记

Posted lokol.

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了课程笔记计算机体系结构复习笔记相关的知识,希望对你有一定的参考价值。

文章目录

第一章 基本原理

计算机系统层次与体系结构

计算机系统层次:应用语言机、高级语言机、汇编语言机、操作系统机、传统机、微程序机

相同指令集体系结构可以有不同的组织(不同的内存系统、总线、CPU等),相同的指令集体系结构何组织在硬件实现上可以不同

体系结构属性:指令集、I/O机制、寻址技术、数据类型的位数

体系结构在组织方面对程序员不可见的(transparent)

体系结构的设计考虑速度、成本、物理器件大小和功耗(power),如乘法单元(成本高、物理器件较大,但速度快)和加法单元迭代使用(相对速度低,但廉价)用以实现乘法。

摩尔定律:晶体管密度及性能每18-24个月翻一番。(已不再适用)

测量及分析性能

性能(performance)的影响因素:响应时间(response time, elapsed time)(反应快慢)、执行时间(运行快慢,评价性能的主要因素)、吞吐量(throughput)(一次性处理数据多少)

执行时间是性能的倒数。

反应时间的定义:硬盘访问、内存访问、I/O操作、系统开销(operating system overhead)所造成的延迟。

执行时间的定义:

  • CPU时间:CPU执行计算所用时间,不包括I/O等待及运行其他程序所用时间
  • CPU时间又可分为:
    • 用户CPU时间:程序所占用的CPU时间。
    • 系统CPU时间:操作系统响应程序请求所占用的CPU时间(与响应时间不同)。

使用程序评估性能的方法:

  • 真实应用进行评估(最精确)
  • 核心应用(Kernels)进行评估:使用真实程序中的关键片段进行性能评估。
  • 玩具测试基准(Toy benchmarks):小型程序进行评估,结果已知。
  • 合成测试基准(Synthetic benchmarks):整合多种应用的benchmark,包括核心程序和真实程序。

比较性能方法:

  • 总体执行时间:各测试程序总的执行时间,该方法在计算机执行程序次数相同时可用。

  • 平均执行时间: 1 n ∑ i = 1 n T i m e i \\frac1n\\sum^n_i=1Time_i n1i=1nTimei

  • 加权执行时间:程序执行频率不同时可用。

    • 指明程序出现的相对频率或权值设定与执行时间成比例: ∑ i = 1 n W e i g h t i × T i m e i \\sum_i=1^nWeight_i\\times Time_i i=1nWeighti×Timei
  • 归一化执行时间:选定参考机,进行归一化,再利用归一化后的数值进行平均,求平均数可使用算数平均数或几何平均数( ∏ i = 1 n E x e c u t i o n   t i m e   r a t i o n \\sqrt[n]\\prod_i=1^nExecution\\ time\\ ratio ni=1nExecution time ratio ),最终:
    实 际 性 能 = 归 一 化 数 × 参 考 机 性 能 实际性能=归一化数\\times 参考机性能 =×

计算机设计量化原理

阿姆达尔定律(Amdahl’s Law):由某些部分加速所得到的性能提高受加速部分的百分率所限。

  • 加速比(Speedup):

加 速 比 = 增 强 后 的 性 能 增 强 前 的 性 能 加速比=\\frac增强后的性能增强前的性能 =

  • 新的执行时间:

执 行 时 间 n e w = 执 行 时 间 o l d × ( ( 1 − 未 增 强 部 分 占 比 ) + 增 强 部 分 占 比 加 速 部 分 加 速 比 ) 执行时间_new=执行时间_old\\times((1-未增强部分占比)+\\frac增强部分占比加速部分加速比) new=old×((1)+)

  • 总加速比:

总 加 速 比 = 执 行 时 间 o l d 执 行 时 间 n e w = 1 ( 1 − 未 增 强 部 分 占 比 ) + 增 强 部 分 占 比 加 速 部 分 加 速 比 总加速比=\\frac执行时间_old执行时间_new=\\frac1(1-未增强部分占比)+\\frac增强部分占比加速部分加速比 =newold=(1)+1

回报递归法则(the law of diminishing returns):对于一部分性能的提高,总体加速比的提高呈递减状态,即贡献越来越少、有上界。

CPU性能方程
C P U 时 间 = 时 钟 周 期 数 ( C P U   c l o c k   c y c l e s ) × 时 钟 周 期 时 间 ( C l o c k   c y c l e   t i m e ) CPU时间=时钟周期数(CPU\\ clock\\ cycles)\\times时钟周期时间(Clock\\ cycle\\ time) CPU=(CPU clock cycles)×(Clock cycle time)

C P U 时 间 = C P U 时 钟 周 期 数 时 钟 频 率 ( C l o c k   r a t e ) CPU时间=\\fracCPU时钟周期数时钟频率(Clock\\ rate) CPU=(Clock rate)CPU

CPI
C P I = 程 序 所 需 总 C P U 时 钟 周 期 数 指 令 数 ( I n s t r u c t i o n   c o u n t , I C ) CPI=\\frac程序所需总CPU时钟周期数指令数(Instruction\\ count, IC) CPI=(Instruction count,IC)CPU
从而可推出:
C P U 时 间 = 指 令 数 × C P I × 时 钟 周 期 时 间 CPU时间=指令数\\times CPI\\times 时钟周期时间 CPU=×CPI×
由于改变时钟周期时间、CPI、指令数其一时,很难不改变其他部分,故有以下计算CPI方法:
C P U 周 期 数 = ∑ i = 1 n I C i × C P I i CPU周期数=\\sum_i=1^nIC_i\\times CPI_i CPU=i=1nICi×CPIi
测量CPU性能的各组成部分:

  • 时钟周期:
    • 已完成设计:利用时延评估器(timing estimators)或时延验证器(timing verifiers)
    • 未完成设计:考察关键路径(critical paths)
  • 指令数测量:利用编译器及测试指令集行为的工具
    • 指令集模拟器(instruction set simulator):慢,但精确测量指令集行为的几乎所有方面。
    • 基于执行的监控(execution-based monitoring):快,通过修改程序(插桩代码)。
  • CPI测量困难:现代处理器存在流水线和存储层次,需要考虑流水线和cache结构。

C P I i = P i p i l i n e   C P I i + M e m o r y   s y s t e m   C P I i CPI_i=Pipiline\\ CPI_i+Memory\\ system\\ CPI_i CPIi=Pipiline CPIi+Memory system CPI

算法设计与分析课程复习笔记

一、计算模型

1.1 定义:

我们在思考和处理算法的时候是机器无关、实现语言无关的。所有的算法运行在一种“抽象的机器”之上,这就是计算模型。 

1.2 种类

图灵机是最有名的计算模型,本课使用更简单更合适的RAM计算模型。

1.3 RAM(Random Access Machine)模型

RAM模型的基本构成如下:

RAM计算模型有如下特点:

  • 一个简单操作花费一步:键值比较、加减、内存访问
  • 没有操作可以被分解:循环、子程序
  • 内存:访存是一个简单操作、无限制的内存

二、算法设计

2.1 算法问题规约

将算法问题严格的定义为精确限定输入\\输出的“规约”形式:

  • 输入:明确定义了算法接受的所有合法输入
  • 输出:明确定义了对于每一个合法的输入值,相应的输出值应该是什么

例子1:

Euclid算法,辗转相除法的算法实现,计算m、n的最大公约数

输入:非负整数m,n

输出:gcd(m,n)

int Euclid(int m, int n) {
    if (m <= n)
        swap(m,n);
    while (m%n != 0) {
        n = m%n;
        m = n;
    }
    return n;
}

//这是测试用例
int main()
{
    cout << Euclid(15,12) << endl;

    system("pause");
    return 0;
}
View Code

例子2:

顺序搜索,在一个数组中搜寻一个具体的数

输入:关键字K,数组E[1...n]

输出:如果K在E中,返回K在E中的位置,如果不在则返回-1

int SequentialSearch(vector<int> e, int k) {
    for (int i = 0; i < e.size(); ++i)
        if (k == e[i])
            return i;
    return -1;
}

//这是测试用例
int main()
{
    vector<int> e = {1,2,3,4,5,6};
    cout << SequentialSearch(e,8) << endl;

    system("pause");
    return 0;
}
View Code

2.2 算法正确性的证明:数学归纳法

EUCLID算法正确性的证明:

当n=0时,对于任何m,有Euclid(m,0)=0

假设当n<=N时成立,考虑n=N+1的情况:

  先有Euclid(m, N+1) = Euclid(N+1, m mod (N+1) ) ,而m mod(N+1)<=N恒成立,根据假设可知Euclid(N+1, m mod (N+1) )总能得出正确的答案,即n=N+1得证。

三、算法分析

3.1 算法的性能指标

  • 时间复杂度
  • 空间复杂度

  在RAM中,时间复杂度使用RAM中执行简单操作的个数衡量,空间复杂度使用RAM中寄存器的个数来衡量。这样,对算法的性能分析变成了一个计数问题。由于RAM是抽象的,所以我们的衡量指标也是机器无关、语言无关的。

3.2 最坏情况复杂度

最坏复杂度的含义是最坏的输入对于的复杂度

例子:

在顺序搜索之中,待搜索的数k在数组e的位置越靠后,所需要搜寻的次数也就越多,当k在e的最后一个,此时为最坏情况。

3.3 平均情况复杂度

仅仅靠最坏情况时间复杂度不能充分代表算法性能。可以采用平均情况下的复杂度。

  • 明确算法所有输入的分布情况
  • 计算期望

例子:

对于顺序搜索的问题,给定数组为E[],长度为n,搜寻目标为K,假设所有输入情况等概率的出现。则成功的平均概率应该如下:

 

以上是关于课程笔记计算机体系结构复习笔记的主要内容,如果未能解决你的问题,请参考以下文章

南大算法设计与分析课程复习笔记

笔记总结计算机专业面向期末考试复习笔记专业课学习笔记课外算法与其他学习笔记

复习笔记软件工程概论复习

openstack云计算实践-老男孩架构师课程教案笔记分享

计算机组成原理考研复习笔记----计算机系统结构概论第一章

ntu课程笔记7454 期中复习