跳转至

1736743329

计算机体系结构

CS 专业必修

课程学习内容

这门课主要包括如下内容:

  • 体系结构的发展历史和量化等常识内容
  • 各种 cache 策略 + 各种分支预测策略
  • 多发射 CPU + 多核 CPU + 线程调度方法
  • 乱序的几种策略,如纯 stall、scoreboard、register renaming、tomasulo、reorder buffer
  • 内存一致性协议
  • SIMD 体系结构 + GPU 简单介绍等

先修要求

  • 计算机组成

直接承接计组的内容,基础部分的内容就是计组的高级部分,如果计组学得很好,这门课的难度将大大降低。

实验要求

  • lab1(6%):forwarding + predict not taken 的流水线
  • lab2(4%):带异常处理的流水线
  • lab3(3%):二路组关联 + alloc + write back 策略的 cache
  • lab4(4%):cache 加入流水线
  • lab5(7% + 2 人组队):简单乱序流水线
  • lab6(8% + 2 人组队)
    • scoreboard 乱序流水线
    • register renaming 乱序流水线(bonus)
    • tomasulo 乱序流水线(bonus)
    • 有兴趣可以做分支预测和 reorder buffer(没有 bonus
    • lab6 bonus 给的好像挺多,好像有 30%
  • lab1(8%):Forward+Pipeline
  • lab2(8%):Interrupt Exception
  • lab3(8%):Branch Prediction
  • lab4(10%):Cache Design
  • lab5(14%):Out-of-Order Execution
  • lab6:Tomasulo(bonus)
  • lab1(6%):forwarding + predict not taken 的流水线
  • lab2(4%):带异常处理的流水线
  • lab3(3%):缓存设计
  • lab4(4%):将缓存加入到流水线中
  • lab5(7%):完成乱序流水线的执行单元
  • lab6(8%):完成 scoreboard 乱序流水线

任课教师

姜老师的专业知识能力和讲课水平还是不错的,重要的知识点能讲的比较清楚。但是因为这门课她一年只上一次,部分地方(比如 GPU)会出现 PPT 不熟悉开始现场回忆或者口胡的情况,这个时候如果遇到不懂的内容可以下课去问她,她回忆起来了就可以讲的很清楚。不是很会使用学在浙大的小测功能,容易花 20min 研究小测怎么打开。如果平时分太高,可能会调分数比例压分,但是基本影响不大;期末考批卷比较捞,能不扣分就不扣分,但是批完以后是不会再捞人的。期末成绩会提前几天公示,可以及时的去争取分数。

需要注意的是,姜老师对验收比较严格,每个实验只有两次验收机会,第一次不通过会扣除 10% 的分数。

常老师的讲课水平不错,思路清晰。老师的讲课会着重于讲解知识的背后逻辑,而对于 PPT 上陈列的点会较快地带过。同时老师不会提前发 PPT,因此如果不习惯这种讲课风格的可能会比较难受。常老师人很好,体恤学生,教书十多年没有点过名(但仍然建议到课)。

何老师讲课较快,PPT 基于姜老师的那版,自己增加了一些内容。经常提前一节课下课。时常让助教讲课,助教讲的也还行。21 级作业和实验给分略严格,验收困难程度取决于助教。

何老师的验收也只有两次机会,且第一次不过会扣分。但从 21 级后续同学情况来看,这条标准较为宽松,不会严格执行。

21 级新开体系结构的老师,讲课较枯燥,分数组成和 PPT 完全沿袭姜老师的体系。21 级情况是实验可以不用验收,也没有小测,且最后给分相当慷慨。

卜凯老师的课是国际化课程,上课会使用英文进行授课。不过在 20242025 学年的秋冬学期,上课的时候有些时候也会使用中文上课,比如在一些关键的地方或者是他认为不容易讲清楚的地方。kg 的英语水平非常好,不用担心英语难以听懂。卜老师的 PPT 是单独做的,和姜老师的 PPT 不太一样,内容基本是按照课本上的内容和顺序进行安排,但是在一些重要的地方会加上个人理解和其他内容。

卜凯老师偶尔会进行小测或者是点名,但是在 2425 学年的秋冬学期中,只有一次小测,几乎没怎么点名。作业会布置两次,一次是在讲完 cache 后布置,一次是在期末前两三周布置。题量不大,并且感觉作业的目的并不是追求答案的正确,基本上只要写了就不会扣分。此外,还会有一次组队展示,需要阅读顶会的和体系结构相关的论文并进行展示,需要使用英文展示。

卜凯老师给分十分慷慨,据笔者课下和老师聊天所知,平时分基本上都会给满。期末改卷的速度也很快,上午考试,下午就登完分了。在实验方面,24 ~ 25 学年的实验课是全程两人组队,验收是老师亲自验收,但是不用担心像姜老师班级一样那么严格,只要认真做了相信问题不会很大。由于实验室的板子的接口已经非常破旧,有时候可能需要多换几个板子才能正常验收。实验报告需要使用英文撰写,但是不需要提交代码。

卜凯老师非常热爱教学,对学生也很友好,有问题可以随时问他,课下也可以找他聊天,不论是关于课程内容还是关于自己的其他困惑,他会非常热情地解答。他会尝试记住来上课的学生的名字,如果被他记住了,那么也许在上课前会看看你有没有来听课(开玩笑的,没来也不会扣分)。总的来说,卜凯老师是一位非常好的老师,强烈推荐选择他的课程。

课程教材

《计算机体系结构量化研究方法》第六版

其中分支预测的部分只有课上 PPT 才有。可以买第五版的书,但是现在普遍用 RISC-V 指令集了,第五版还是 MIPSPPT 没有更新用的也还是 MIPS

这本书是体系结构领域非常经典的书籍,值得一读,但是每章后面的练习题难以恭维。

分数构成

所有老师的期末考试占比都是 40%,下面仅列举老师的平时分数构成。

20、21 级的各部分比例如下

  • homework 4 次(16%)
  • quiz 2 次(12%)
  • lab 6 次(32%)

21 级的各部分比例如下

  • homework 2 次(8%)
  • 出勤 + 展示(三人小组,主题是 cache 性能的优化)(6%)
  • lab(48%)

21 级的各部分比例如下

  • homework(20%)
  • lab(40%)
    • 何老师的前 5 lab 可能有附带的 bonus,要求是做一些额外的功能。

21 级的各部分比例如下

  • lab(60%)
  • bonus: quiz, question, discussion(<=10%)

22 级的各部分比例如下

  • Class participation & performance(4%)
  • 作业及展示(16%)
  • 实验(32%)
  • 小测(8%)
  • 期末考试(40%)

学习建议

体系结构的任务还是比较轻的,课程内容虽然设计的量比较大,包括 Cache、分支预测、SIMD、多发射、乱序、多核等一系列内容,但是都不是非常深入,大多数重在了解,其中乱序的算法、内存一致性协议达到了定量的程度,其他主要还是定性的程度。lab 比计组的简单很多,不同于计组的纯手搓,体系的 lab 都给了代码,只需要做适当的填空即可,很多时候一个下午就可以了,甚至 lab1、lab3、lab4 其实计组很多人都做过,可以直接用计组的代码来验收(姜老师班)如果要做 bonus 那需要自己写代码,没有框架可以用,所以这门课任务量还是比较少的,不会太占时间。期末考可以带 1 张手写 A4 纸,拿来抄各种策略、协议和算法还是不错的。

体系结构这门课为人诟病的一点在于,不同老师讲的内容出入可能会非常大,而且由于期末考试是不同老师出题之后组卷,有可能出现考没有讲过的内容。建议复习时参考多个老师的 PPT、复习课,以及 98 的回忆卷。Cache、乱序(Scoreboard、Tomasulo)、Cache 一致性(MESI、Directory)这部分内容相当重要,时常会在大题里出现。

P.S. 如果对乱序执行中的时序感到有点混乱,建议以书为准,虽然书中的描述有些抽象。可以参考姜老师的 PPT 中展示的具体顺序来学习,不过可能需要注意每个执行单元所需要的时间有可能和书上的不太一样。此外,在复习的时候可以参考历年卷,23 年何水兵老师的最后一节课上放出来了前一年的试卷,可以去看一下回放。从 22 级的考试题目来看,参考的价值还是比较大的。