计算机系统概论(H)(安虹) 2019秋 2018秋 2017秋 2016秋 2015秋 2014秋 2013秋 2012秋  课程号:01170401
2019秋 2018秋 2017秋 2016秋 2015秋 2014秋 2013秋 2012秋  课程号:01170401
9.1(13人评价)
  • 课程难度:中等
  • 作业多少:中等
  • 给分好坏:一般
  • 收获大小:很多
选课类别:计划 教学类型:理论实验课
课程类别:本科计划内课程 开课单位:计算机科学与技术系
课程层次:未知 学分:4
点评 写点评
boj 2017秋

《计算机系统概论》这门课程脱胎自 2011 年夏季学期的一门课 https://icourse.club/course/6240/

当时是安虹教授请大名鼎鼎的 Yale Patt 教授在暑期学期来讲的,教材也是他的名著 Introduction to Computing Systems: From Bits and Gates to C and Beyond

这本书(这门课)跟 CSAPP(计算机系统详解)都是计算机系统的入门书(入门课),两本书(两门课)着眼点不同。Yale Patt 的书(这门课)着眼于硬件角度,看计算机系统如何从门电路、处理器一级级搭建起来的,硬件给我们提供了怎样的接口和抽象。CSAPP(计算机系统详解)着眼于软件角度,看如何用算法和编程语言描述一个问题,操作系统给我们提供了怎样的接口和抽象。这两本书都是不可多得的计算机系统全景解析式著作,即使对于资深的计算机系统研究者,翻阅这本书仍能获得一些启示。

推荐科大计算机系学生选修计算机系统概论计算机系统详解这两门课,一个是硬件方面,一个是软件方面,对计算机系统的构成有个全面的了解。

2017-09-23 16:57 3 0
wsc 2016秋

很有收获的一门课!安虹老师是一位很优雅,有气质的老师。上课从头到尾都表现出一种从容,这是很多老师都无法做到的。

课程前期与“模拟数字电路”中的数字部分有些重叠,但我感觉这门课讲的比模数这门课更加简明扼要,不注重各种细致的概念,更重原理,我觉得这样挺好。(比如,这门课就不会细讲各种选择器、触发器的类型与大同小异的功能,模数在这里就会讲一大堆。。)

课程会让我们每人上台花5-8分钟讲一些与计算机有关的话题,不过觉得很多人都讲的太高深,几分钟内难以听懂。倒不如讲一些很小的,有意思的点。

安老师还会顺便讲一些与超算竞赛有关的事情,听起来挺有意思的,感兴趣的同学不妨一选。

只是有时候感觉某些知识已经讲的很明白了,安老师还是不断的重复,怕我们不懂。

这门课到后期还是花了不少时间的,主要用在调汇编程序。

难度方面,感觉[产生CPU中断信号与栈的实现]的内容稍微繁杂了点,得看书看好久才能全面弄懂(而且还不是写在一块儿,附录里面有更细致的描述)。之前的内容比较好理解。

给分目测不差,我也只是刚得优秀,已经满足了,感觉这门课是认真点就可以得优秀的那种。(我这样说,是因为确实有那种努力了却给分不好的课...)

另外,教材建议买英文版,因为考试题也是全英文。好像有人因为长期看中文教材而导致期末考试看不懂题...

2017-01-25 10:49 3 0
printk 2018秋

关于上课:

安虹老师特别有情怀,对学生也很好www

ICS 这门课主要注重自底向上的构建一个小计算机(LC-3,Little Computer-3),大概逻辑如下:

门电路 => 触发器、记忆元件 => 状态机 => LC-3 CPU => 算数指令实现,控制指令实现 => 写汇编程序 => Calling Convention (=> C to Assembly && so on)

不过都是些比较基本的内容,和数字电路也多有重叠,加上安老师讲课比较慢,所以基本上课都去写别科作业了......我想我看的太快了


关于福利:

课程里面有三次报告:

  1. 李向阳 (忘了说的啥,时间太久了大概我记得有 Turing Completeness 和正规语言什么的...)
  2. 胡伟武 @ 龙芯的发展(& 和安老师叙旧)
  3. 包云岗 @ Tagged RISC-V Architecture (& 和安老师叙旧)
  4. 陈云霁 @ Cambricon NPU (& 和安老师叙旧)

(哇,安老师竟然和这么多人都有渊源...)

另外,每个人都送了一本《永恒的图灵》,夹着李向阳院长的赠语和安老师写的名字,感动.jpg


关于研讨课:

这个课在每周都有一个研讨的 topic,每个人在学期初自由分组,然后被 assign 一个 topic 来分享。

不过其实搞的有点水,感觉台上讲了台下也没什么积极性,大家也只是查个 Wikipedia 综合综合这样子...

和我想的研讨课有点差距.jpg

p.s. 讨论课要点名


关于作业:

都是一些课后习题 & 思考题,写完了过一阵会发布答案(可参见 http://acsa.ustc.edu.cn/ics/homework.html )

今年的给分应该是按时交作业就给分,详见下面 score 的公式。


关于实验:

我其实不知道去年的实验是什么样子的,但是听他们说很水...

今年的实验要求可以在 http://acsa.ustc.edu.cn/ics/lab.html 看到(截至 2019-06-25)

实验本身就是用 LC-3 Assembly 写几个小程序,不过今年的实验对于喜欢计算机的同学来说确实很有意思:

  1. Write a program in LC-3 machine language with a hex editor (like xxd, wxHexEditor, 010Editor etc.), in order to perform a 1-bit arithmetic right shift on the given value.
  2. Write a program in LC-3 assembly language and assemble it into LC-3 object file using an assembler. The program will be used to calculate the greatest common divisor of two positive numbers.
  3. Complete and compile the given C code into LC-3 assembly language manually, and then assemble it into LC-3 object file
  4. Compile the C code in Lab 2 into LC-3 object file using any C compiler and compare the result with yours in Lab2. 

对于实验 1 和 2,分别按指令执行时间和指令条数来进行记分。实验是将源码、 object file 和设计报告发过去,助教来进行统一的测试(比如统一的数据集,类似 OJ)

对于实验 3 和 4,主要在体会不同的 ABI 之间的区别,设计简单的 ABI 以及 Tradeoff。

写 LC-3 CPU/汇编器/编译器 有加分。我写了一个简单的 LC-3 IR => Assembly 的东西,不知道加了几分.jpg

 

其实我个人认为小邓学长(本届助教之一)的实验设计是比较出色的。引入 Scoreboard 机制可以帮大家花费更多时间在优化程序,而不是优化报告上(毕竟程序没难度就只能用报告给分?),而且大家想到的优化方案也确实让我大开眼界owo(我还记得我压 ddl 改汇编 + 跑分 + 提交)

不过,小邓学长的实验比较要求动手能力(比如 example 给的都是 Linux 下的,第四个实验也需要 lcc ,而基本上只能在 Linux 下 make 然后用)。我因为高中就用了两年 Linux (自己瞎折腾),对这些工具和概念还算熟悉;如果之前没有接触过的话,确实需要下一番功夫。但是,这种努力我认为是值得并且必要的——学习计算机,应该有一套熟悉并且趁手的工具链来完成想实现的功能。

 

p.s.1 如果要测试自己程序的性能,建议学习一点 Shell 编程的知识,实现调用 lc3sim (长得跟 gdb 差不多)自动化测试 + 生成随机数据集;再加上 pyplotlib 生成散点图,炒鸡漂亮(自夸中)

p.s.2 其实 lc3sim 的 C 源码很好读,写法非常粗暴(除了用宏处理指令那里)。如果需要进行 Profiling 查找热点代码不妨直接给 lc3sim 打补丁,不过我打了补丁最后也没来的及用

p.s.3 小邓学长把第五个实验咕掉了,不过实现了一个 LC-3 CTF (https://lc3ctf.co/),不过似乎现在也处于咕咕状态(

p.s.4 小邓学长 tql

p.s.5 有人要我写的破轮子可以戳我,我放上来


关于给分:

助教在群里给出的数据如下:

  1. 及格率 99%,优秀率 47%,平均分 82.48,90 分以上 25%
  2. 调分公式 score = ceil(4*sqrt(score)+0.6*score); if (score ∈ {94, 89, 84, 81, 77, 74, 71, 67, 64, 63, 60}) score++; if (score < 60 && !(电话打不通QQ联系不上邮件不回)) score=60;

其中 score = (mid + final * 2) * 0.1 + (avg(lab[4]))*0.3 + 0.24*max(avg(lab[4]), (mid + final * 2)/3) + 0.15 * discuss + (hw == 6 ? 1 : 0) + extra_points_scaled。extra_points_scaled 由平时表现和课外作业给出,对于 99% 的同学∈[0,5],对于 89% 的同学严格为 0 (所以大抵是提交 CPU/汇编器/编译器之类的分数)

这门课拿了 4.3,感谢帮助我的小伙伴、老师和助教们www


夹带私货,不喜勿喷:

我觉得小邓学长作为助教是非常用心的,并且非常「喜欢计算机」,某种程度上有一些 hacker 的风采吧 www

上初中的时候觉得 Richard M. Stallman 非常 cool,所以我其实还是挺喜欢这种 geek 文化的。

我其实不是英才班的同学,选这个课是觉得这门课比较有意思,结果也确实很有意思(笑)

2019-06-25 17:14 2 5
TheLitFire 2018秋

英才班必修课。

tip1:计算机院非英才班和外院若非对自己的时间精力水平(还有英语ORZ)有较大自信,选课之前千万慎重,不要想着什么“大家都学了”“这东西挺有用的”之类的就脑子热,四个学分拉了绩点你重修一遍单多变量都赶不回来。(今年实验巨坑,有可能我们今年赶上个神助教)

tip2:如果你最终由于拿了每年的5k8块钱或者最终还是准备涨以下自己的计算机姿势而选了这门课,首先只要你上课认真听讲,你会发现这门课不难。如果你把这门课的地位和学校通修的数学课划在一个层次上,平时的作业和实验对你而言也不会算太多。安老师上课还是不错的,平时还会时不时找一些科大校友什么的回来做个报告。至于课程内容的完整性、对计算机理解的重要性,我觉得不必多谈。

tip3:课程ppt、教材、实验和作业的pdf、考试卷子都是全英文(当然教材有中译版),当然考试和写作业的时候不要求你用英文作答。要求对课程范围内的英文名词要足够熟悉,平时不建议全程看中文教材,起码中英文要对照。(舍友考场上不知道啥是decoder废了十几分钟,另一个把三个两输入与门看成两个三输入与门,一道15分?左右的大题gg)

tip4:实验十分“有趣”(估计是赶上了这届助教是个巨神,去年实验水的要死),一条投机取巧的建议是不要太着急实验刚发布就开始做。比如一道指令算法题,要你的“速度”越快越好,群里的各位巨佬就会开始军备竞赛:今天他们还6w+条指令,第二天就有人优化到2k,然后没过几小时就有人搞到300条,然后180条,150条,110条,90条,85条,74条。。。。。。不得不说的是这种东西十分消耗时间,而且一个实验9分速度部分占25%还不划算,你很多的前期工作还可能因为大佬的一个奇妙优化直接白费力气,互相攀比,互卖关子,一个星期的实验可以搞得大多数人当场自闭。建议别上来就做,找个好说话的大佬把他优化的上一个版本给你讲讲(我最后这个实验优化到93条,上一个150条的版本直接给别人讲出去了,因为对这种军备竞赛实在是很讨厌

tip5:群里的助教也是大佬(还是可能我们这届很倒霉),时不时在实验要求、成绩发布的时候给你搞一大堆你听都没听说过的骚操作,你在群里问他还会说“你去学呀,我都在群公告里说了这是sha256,你不会看字的嘛”之类的。上文提到的这个实验最后成绩发布的时候没有贴学号,你要把你的程序用sha256哈希以下得到哈希代码和它后面那一串乱七八糟的东西比较才能知道哪个是你的成绩(我百度的时候一搜是个加密,搞了半天搞不出来,最后在助教diss另一个人的时候我才知道这个不是加密是哈希)。所以有问题还是找个好说话的大佬来问,顺便给你看不顺眼的助教一个非好评

tip6:作业不占分,但是不交会倒扣。相对于一个4学分的课,不多不少吧。讨论课不必过分紧张,你会发现谁讲的时候台下都不会有人听

tip7:你可以选择上课不听,考前预习。前提是你要划出较大块的时间去通篇一字不差地把教材读了看了,作业题搞了。这个是绝对可以的(起码期中的时候),当然你最好对自己的自学和英语能力有自信再去作这个死。(今年期末略炸,该tip慎重考虑。还是这届孩子倒霉碰见个巨佬助教出书上没有的东西,也不怕被骂死)

tip8:计算机学院课程资料请移步本网站---模拟与数字电路实验(卢建良)---下面的某条评论的github

//考完更新一下

以上语言略有刺目,但是什么大佬都不该摆出一副菜就该死的魔性

2018-12-17 20:43 2 1
124万岁 2016秋

ics,一门值得一学的课程。给后续课程打基础,同时有着提纲挈领的作用。也有利于同时期的数字电路的学习(虽然有一定的重复),课程本身不难,但事情不少。

建议使用英文版教材,一方面可用于锻炼英语阅读,另一方面亦可以为考试时的英语试题做准备,我想还是有些人在考试时耗费了一些时间用来读懂题意。平时作业不计分,只要交了即可,但还是要认真做一做,熟悉考试套路。实验有不少,前几个还好,最后一个也算是不小的工作量,建议做好心理准备(但没有数电的大实验花的时间多)。

感觉分数给的还可以,但是不是很清楚具体每项是多少分,希望以后可以提供了解平时分的途径,或者至少在提交了实验后给个评价,不至于让人不清楚自己平时成绩到底如何。

讨论课的价值在于拓宽视野,意义不是很大,不过就算不感兴趣的话,还可以一边听一边写大雾不是?

2017-02-04 15:01 2 1
浮云兔斯基 2016秋

这门课还是比较有特色的,期中考试占10%,期末占20%,反而是平时实验占了很多分,作业交了不看对错,不交倒扣分,而且课本、实验报告、作业都是英文,写了一个学期,虽然我写的报告还是中国人外国人都看不懂的神秘语言模式,但总归增加了蜜汁自信。 期中和去年的卷子大同小异,期末逗比助教非说比期中还简单结果一考发现是hard模式,不过最后给分应该挺好的,感觉群里大家都很开心。 另,安虹是继陈发来之后又一个让我觉得优雅的老师,有次去食堂听见她一边走路一边打电话讲xxx怎么优化什么的,满足了我对知识女性的全部幻想。

2017-01-25 10:23 2 0
taoky 2018秋

计算机系统概论 (H) 是我大学两年来感觉最有意义,收获最大的课程之一。推荐对计算机底层感兴趣的同学选择。

虽然说我这一届的话,小邓学长被骂得比较惨……实话讲那个速度军备竞赛的实验我也没有用太多时间去优化(时间都给数电实验大作业了,然后没有大作业的 F 同学荣获军备竞赛第一),最后速度分也只拿到一个中位数。不过整体的实验其实没有那么可怕,除了军备竞赛实验比较压抑以外,别的感觉都挺不错的……(虽然最后有一个写 ISR 的实验没有出)

最后给分的话其实低于我学期初的预期……其实感觉主要是因为我期末翻车 + 实验速度分不高的原因吧……(如果我没做 assembler 和破解某个 editor 程序的附加任务的话,分数会更低,所以建议有兴趣获得高分的同学做一些与 LC3 有关的题目)

期末之后会选一些分数靠前的同学去超算队面试选拔,如果有兴趣的话可以提前准备一下。我因为太菜,而且有别的比赛要做,所以现场划水,于是愉快地被刷掉了。

实验具体的细节 @printk 有很好的介绍,这里就不重复了。

2019-06-25 21:49 1 0
ElisaAI 2016秋

我感觉ICS对后继的课程还是很有帮助的,考试占比重不大,主要是每一次的实验(作业只要交了就有分)。

安虹老师的ppt真是清晰又容易理解,至少目前我没有再遇到哪个老师的ppt写得这么好了……

给分挺好的

2017-06-13 23:35 1 0

英才班课,讲的是如何从晶体管层面一层一层抽象到汇编语言层面从而构建一台计算机及其指令集架构。一学期下来,能够深刻理解CPU的基本工作原理,收获还是很大的。非英才班和非计算机专业的如果有兴趣也可以选一选,不需要什么预备知识。

教材是Introduction to Computing Systems那本英文书,只讲C语言前面的部分。考试是英文试卷,可以用英文或者中文答题。只要作业题都完全理解了,考试就应该没有什么问题。

期中10%期末20%,平时作业不计分交了就行,其余给分都是实验和讨论课。只有一次点名,据说是占总评1%。

作业和实验都是在电脑上写完之后发到课程邮箱,ddl一般是周六24点。实验是用LC3汇编语言写程序,前几个简单,后几个还是有点麻烦的。

每周日晚上有额外的讨论课,要么讲作业,要么针对之前给定的话题进行小组展示。多发言可以加分。

不太清楚其他人的总评成绩,所以无法准确评价给分好坏。不过英才班课优秀率应该蛮高的。

安虹老师还是很和蔼的,只是有时候会把一段内容重复很多遍。

课程主页在这里:http://acsa.ustc.edu.cn/ics/,所有和课程相关的内容都可以在这里找到。

2016-02-12 23:22 1 0
perl 2018秋

给分不错,优秀率50%。但是实验太变态了,难而且竞争很严重,不是大佬慎选。

2019-02-09 19:31 0 0
Nemo. 2016秋

会让人很有收获的一门课,对之后的数电组成原理之类的打下很好的基础。

实验有点像写汇编,可以学到简单的调试。

考试全英文,感觉有点小坑,题太长要读半天。

英才班课,给分还是稳的。

2018-07-12 15:47 0 0
Fx 2017秋

        这门课从二进制编码开始,一路经过逻辑电路、内存、机器语言、到汇编语言(包括后续基于汇编的输入输出、系统调用、中断程序、栈与工作栈等),讲解了计算机系统的工作原理,内容还是很丰富的。并且课程注重概念和逻辑框架的搭建,没有很艰深的内容。就算到了后期,从作业、上机题到考试也都是有繁度没难度的,完全不用担心学不会,推荐所有同学选。

 

        安老师讲课的风格是一个知识点翻来覆去地讲,非常细致,但个人感觉节奏太慢,不如看书。鉴于所有任务都是用英文布置的,而且毕竟阅读英语文献是必备技能,建议买影印版的英文教材来看(实体书,考试开卷,知行书店有二手书,全新的网上也有卖)。对英语不好的同学来说看书会有一定困难,但请一定坚持啃下来。

 

        作业和实验是这门课的本体,作业题一共6次,一般会给两周时间完成,题型和课后习题类似,不算分所以做的时候不用太纠结对错,按时提交即可。随后助教会把作业答案放到课程主页(http://acsa.ustc.edu.cn/ics/),一定要核对,把错题搞清楚。实验一共5个(往年有6个),同样有两周时间完成,内容为写lc3汇编语言程序实现功能,设计难度不大,但调试汇编语言程序会费点时间。需要写实验报告。

 

        这门课要求两人一组做课程相关的课题展示,在每周末的讨论课上完成。助教会给出几个课题但请同学们不要拘泥于此(今年感觉至少有10个组讲简单复杂指令集的对比……),事实上任何专业相关课题都欢迎。
 

        期中期末两次考试,题型和作业题类似,难度不大但题量爆炸,要加快做题速度。

 

        总评组成:实验原定54%(每个实验9%,但今年砍掉一个实验,不知如何调整了计算方法),展示16%,期中10%,期末20%,作业不计但不按时交会扣分。实际操作时,实验的给分分为两个维度:程序的正确性和实验报告,程序只要大家交之前测试一下基本上都是没问题的,那么主要的拉分项就是实验报告了,经验告诉我们请认真写实验报告;展示的成绩最后助教选择不作区分,基本上都是给满的。这门课不限优秀率,目测大家的成绩还都挺不错的。

 

        最后说一句,安老师是学校超算鸿雁队的领队,每年秋季学期会面向大一大二同学招生,感兴趣的同学请尽早准备。

2018-02-02 17:22 0 0
peining 2015秋

课程难度不大,后面几个实验作业比较花时间一点,听说下一届作业就变多了。

课本推荐用英语的,上课ppt也是英语的,不过总体来说自学一些也可以。

这门课和很多其他课程有重叠,最主要部分是LC3的汇编,这一块也算是比较透彻了。

有讨论课的传统,就是没人准备一个话题去讲,基本上就是各种dalao秀啦。

给分一般吧,虽然期中期末考都不难,不过我大概考得不太好。

2016-12-26 21:32 0 0

其他老师的「计算机系统概论(H)」课

未知 2016秋

安虹老师的其他课

高性能处理器体系结构 10.0 (1) 2019秋 2018秋...
计算机系统概论 9.5 (2) 2011夏
计算机导论 6.0 (1) 2013秋
多核计算 2008秋
虚拟机技术 2006秋
高性能计算 2015秋