2017-2018-1 学号20155209 《信息安全系统设计基础》第七周学习总结
2017-2018-1 学号20155209 《信息安全系统设计基础》第七周学习总结
教材学习内容总结
- 一个处理器支持的指令和指令的字节级编码称为它的指令集体系结构ISA。
- 虽然每个厂商制造的处理器性能和复杂性不断提高,但是不同型号在ISA级别上都保持着兼容。因此,ISA在编译器编写者和处理器设计人员之间提供了一个概念抽象层。
- 这个概念抽象层即ISA模型:CPU允许的指令集编码,且顺序地执行指令,也就是先取出一条指令,等到她执行完毕,再开始下一条。然而,现代处理器的实际工作方式可能跟ISA隐含的计算模型大相径庭。通过同时处理多条指令的不同部分,处理器可以获得较高的性能。但其必须对外表现出符合ISA模型的执行结果。
- 在计算机科学中,用巧妙的方法在提高性能的同时,又保持一个更简单、更抽象模型的功能,这种思想是众所周知的(抽象)。
- 处理器:执行一系列指令完成相应功能
- 指令体系结构:处理器支持的指令和指令的字节级编码
- 指令集在机器型号上有着一定要求(不同型号相互兼容)
- 通过处理多条指令的不同部分(流水线)提高性能
- Y86体系结构:过程:定义指令集(对操作及位长定义),寄存器标识符定义,编码(将每一条指令根据固定格式翻译成唯一的二进制编码,整数采用小端法编码,根据地址及指令长度更新指针)
,对细节把握 - 遇到异常时停止指令执行(完整设计中会调用异常处理程序)
- 逻辑门,存储器和时钟等基础知识,同时介绍HCL语言,清晰明确的显示出所有候选条件,类似C语言- 硬件结构
- SEQ:完全顺序执行,使用较少的硬件资源,需要信号向后传递,导致处理太慢;
- SEQ+:和SEQ相比在时钟周期开始时更新PC值,提前确定下条指令地址
- PIPE-:在SEQ+各阶段间加入流水寄存器,对信号重新排列,通过暂停方式处理数据冒险
- PIPE:在PIPE-基础上可以通过转发处理数据冒险,避免了停顿,提升吞吐量
- 流水线
- 由时钟信号控制,使多条指令不同阶段可以同时执行,增加了延迟,提升吞吐量
- 问题:流水阶段长度不一,流水线深度过大插入寄存器影响性能
- 因为存在反馈的流水线(即一条指令可能需要多次执行某个操作,或使用某个数据,访问某个存储器或寄存器)导致流水线冒险(数据,控制)
- 数据冒险解决方案:暂停(系统判断是否会产生冒险,会则插入气泡,延迟下条指令执行),转发(使产生的结果理解送入需要的位置,避免暂停),加载\使用(当存储器读发生较晚时需要暂停和转发机制同时使用)
- 处理return:暂停流水线直到ret指令到达写回阶段
- 加载/使用冒险:在对存储器读和使用之间需要暂停一个周期
- 预测错误分支:当预测失败时应该可以返回到之前状态,去掉错误指令
异常:出现异常时,停止后序指令执行,并避免当前异常指令写回 - 性能分析
CPI=1+处罚项(预测错误+返回+暂停)
目标:使CPI=1;一个周期执行一条指令 - 流水线主要讲解流水线的概念,分类,根据是否存在反馈回路分为线性非线性流水线
- 对非线性流水线的调度,本质就是想办法使流水线执行起来不冲突,在教材上通过预约表冲突向量的方式并考虑到吞吐量计算出最佳调度方案
- 网上学习的时候看到一个很好的图
教材学习中的问题和解决过程
- 如何对流水线段进行划分?
- 流水线在设计的时候肯定是需要分段的,那么划分的时候有两个原则:
- 划分的段所用时间尽量相同或相近。因为流水线运行周期是由最慢阶段的延迟限制的,如果段有长有短,自然就会浪费很多时间。
- 段划分不能太细,因为中间的时钟寄存器需要花费一定的时间,这实际上为指令的执行增加了时间。如果我们划分的太细,甚至增加的时间比原来消耗的时间都多,那就得不偿失了。
代码调试中的问题和解决过程
-
下载Y86模拟器,由于使用的mac系统,mac系统中没有不能使用apt-get。
-
于之前接触过Ubuntu的系统,所以比较熟悉一个便捷的安装软件包的命令sudo apt-get install xxx,一直觉得Mac也是Linux的系统和Ubuntu的区别应该不大,然而今天使用命令sudo apt-get install时Mac系统却报出了-bash:apt-get:command not found 这样的错误,后来上网查询才知道,原来apt-get是debian(Ubuntu)才有的包管理器,遂继续查询解决方案。
-
使用brew代替apt-get
-
brew 全称Homebrew,是Mac OSX上的软件包管理工具,能在Mac中方便的安装软件或者卸载软件。
-
安装之后由于教程不同,最后还是在实验楼中完成作业。
代码托管
(statistics.sh脚本的运行结果截图)
结对及互评
本周结对学习情况
- [20155230](http://www.cnblogs.com/J1n233/p/7708372.html)
- 结对照片
- 结对学习内容
- 学习本章内容,编译国密算法。
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 20/20 | 1/1 | 20/20小时 | |
第二周 | 50/70 | 1/2 | 5/25小时 | |
第三周 | 100/170 | 1/3 | 10/35小时 | |
第四周 | 68/238 | 1/4 | 20/55小时 | |
第五周 | 40/278 | 1/5 | 10/65小时 | |
第六周 | 100/378 | 1/6 | 10/75小时 | |
第七周 | 30/678 | 1/7 | 10/85小时 |
-
计划学习时间:20小时
-
实际学习时间:10小时
-
改进情况:
(有空多看看现代软件工程 课件
软件工程师能力自我评价表)