选课类别:计划内与自由选修 | 教学类型:实验课 |
课程类别:本科计划内课程 | 开课单位:计算机科学与技术系 |
课程层次:专业选修 | 学分:1.0 |
本课程旨在带领学生设计一个可用的计算机原型系统,包括CPU、Peripheral等硬件系统,以及bootloader、OS等软件系统,帮助学生加深对计算机系统的理解,培养学生的计算机系统综合设计能力。
《计算系统综合实验》是《计算机组成原理》和《操作系统原理与设计》的后续课程,旨在通过实验深入探讨系统结构设计。今年首次开设,定位于培养系统结构和处理器设计研究的能力。课程主要通过短平快的实验设计,侧重系统科研能力解读、常用工具使用和实验原理演示。实验包括仿真环境搭建、单周期CPU及其优化、特权指令处理、加AXI总线协议等内容。
卢建良老师和三位助教都投入了大量精力,其中助教在课程建设和实验框架搭建方面起了重要作用。助教们提供了详尽的实验文档并热心指导,但部分学生认为助教高估了大家的基础水平。课程过程中,卢老师也多次询问学生进度并尝试理解大家的困难。
实验任务复杂,包括C++、Makefile、仿真环境搭建等,许多学生面临较大挑战。部分学生在DDL前扎堆完成实验,带来了巨大压力。实验内容偏难且紧密关联,失败的实验会影响后续任务,实验框架也被认为耦合性高、注释不足。
本课程没有传统考试,成绩评定主要基于实验完成情况和签到。总体给分宽松,不会挂科,但要拿优秀需较强能力。同等情况下,大三学生拿优秀优先。部分学生认为给分比预期更好,但也有人感到课程难度和给分宣传不符。
对于有志于系统结构、处理器设计研究的同学、以及基础较好的大三学生,本课程是一个宝贵的学习机会。课程对基础要求较高,不熟悉C++、Linux、Makefile的学生可能感到艰难。不建议仅为学分轻松过关的大三学生选修,适合准备水学分的大四学生参与。
尽管课程首次开设且难度较高,但对于喜欢系统结构方向的学生,这门课程提供了深度学习的机会。不过,课程内容和难度与最初宣传有所偏差。希望未来能够在总结经验的基础上,调整结构,平衡难度,进一步完善。
作为一门在培养方案里沉睡多年的课程,今年秋天,它终于在卢建良老师的推动下到来了!作为本门课程助教先占个坑(主要是希望能在评课社区给大家对这门课的一个简要介绍),希望这门课能够在我们的共同努力下,给大家带来全新的课程体验!
----------------------------------------------------------------------------------------------------------------------------------------
2023.7.26 第一次更新:
-- 这门课是什么?
这门课主要的定位是《计算机组成原理》和《操作系统原理与设计》的后续课程。由于计科大三上学期并没有系统结构方面直接相关的课程,而系统结构作为计算机学院的核心竞争力之一,总是难以让大家有一个连续的培养体验,因此,这门课程将会融合以上两门课程,进一步通过实验来探究更加深刻的系统结构设计。
-- 这门课的实验侧重什么?
这门课所有的实验基本都是一周(如果中途有考试等特殊情况可能会动态调整),主打的是一个体验:我们不希望使用时间跨度很长、难度很大的实验来为难大家。相反,在实验设计的过程中,我着重在系统科研能力解读、常用工具使用、实验原理演示这三个方面进行了着重设计,也单独设计了若干实验来专门为大家配置环境、介绍调试方法,用短平快的实验设计带领大家先体验、后实施,而不是使用高难度、少提示的实验设计来考验大家。
-- 我适合选择这门课程吗?
这门课程是开设给2020、2021级同学们的,非常适合有志于系统结构、处理器设计研究的同学选择,同时也非常适合希望能把COD和OS进一步进行研究的同学进行选择。同时,由于这门课的实验难度要小于组成原理和操作系统的实验,因此如果你还不清楚自己未来想要研究的方向,那么这门课也可以给你提供一个尝试的机会。总而言之,虽然这门课是全新的课程,但对于马上要步入大三、大四的同学们来说完全不会出现“初见杀”的情况,因为助教本身就是大四的学生,通过一整年助教工作的锤炼,我非常有信心能够打破课程的“初开魔咒”,让大家真正学的开心、学到本领!
(p.s. 如果想要选择这门课程,建议能够装配一个比较稳定的Linux虚拟机,实验的内容必须在Linux系统中运行)
----------------------------------------------------------------------------------------------------------------------------------------
2023.8.16第二次更新
实验开发ing...
在开发实验的过程中,我们在不停的“砍砍砍”。本以为之前商讨的方案是可行的,但是真的写实验文档之后,感觉到虽然很多实验大家都接触过,但同学们每次实验还是有较多要阅读、学习的,所以就大刀阔斧的砍掉了冗余、繁杂的内容,保留了许多值得做、值得学习的内容。看看这几天助教们的提交频率就可见一斑:
总而言之,还是回到这门课的主旨:希望大家能多多学到有用的知识和本领,并且能在未来的科研生活中真正运用。
2024.2.8出分更新:只能说给分比想象中捞,不能全信既得利益者的高分评课。我没有极强的学习能力,照样用一学期的痛苦换一学分的3.0,顺便给忽悠我来的同学垫优秀率。据说有35人选课,3人中期退课,还有我想退课但机会用完了,准备下学期给成绩放弃掉。这门课让我充分认识到妮可“fly bitch”的本质,并远离体系结构方向,远离ljl,去寻找AI方向的实验室。
为了劝退一些和我一样不知死活的大三学生,我决定以更加理性的方式评课。这门课适合大四想水学分的人选,只要签到了就算实验不做也不会挂科。也适合基础扎实的大三学生选,可以学到很多东西。如果是数电、操作系统、组成原理学得一般的大三学生,将度过痛苦的一学期。
上课:先由三位助教进行讲解,然后可以在教室做实验,也可以找助教检查实验。有签到签退,可以叠后两节课,没有严格规定必须呆满四节课。签到签退占60分,当且仅当实验分小于70可以使用。
实验:有专门搭建的实验网站,上面放了lab0-lab8的教程。与数电实验和组成原理实验不同,这门课不使用vivado在FPGA上测试,而是用C++实现仿真模型,所有的代码框架都会给出。这样做本意是降低难度,实际上增加了难度。对一般的学生来说,给的实验框架很难看懂。如果不熟悉makefile和c++,实验1的填写makefile任务,以及后续一些实验的补全C++框架任务也是障碍。实际课程安排和刚开始的宣传不太相符(我后面会说)。除此之外,配置环境的过程很繁琐,所以课程提供配置好环境的vlab虚拟机,但是它们很容易卡顿,降低了读写代码的效率。
老师:人很和善,课很恐怖,期中和期末会给我们带礼物。不过这门课主要是助教发挥作用。
助教:三位助教的水平很高,也非常热爱这个研究方向,他们为这门课付出了很多努力,这一点是毫无疑问的。但是显然高估了学弟学妹们的水平。
给分:不会挂,同等情况优先大三拿优秀,有没有福气拿就看你本事了。
其他:这门课是第一年开,老师助教想方设法忽悠人来选也正常,但是这门课有点太离谱了。实际难度与宣传严重不符。
下面是我曾经的兄弟拉我选课的聊天记录,之所以是曾经,是因为他拉我选了这门课。
下面是助教介绍这门课的聊天记录,也是曾经的兄弟转发给我的。
事实上,我是数电实验普通班出来的,我基础一般但喜欢数电实验,所以选了这门课。我觉得数电实验普通班比这简单很多倍,显然助教高估了我们的水平。这实验框架的学习曲线太陡了,完全跟不上,最后什么也没学会。实验内容也不是只有几个verilog状态机,它要复杂很多,还需要读懂和补全测试环境的代码,这也不是1学分的工作量,光是C++和makefile就把我难住了。
我发这个评课,大家可以来骂我,我不在乎。这件事我也有错,那就是第一次课在第二周星期五的下午,我没有上完课就给它退了,等到想起来已经来不及,两次退课机会也用完了。还有人责备我自己菜,却怪助教怪课程,但我也只是信了宣传,想选符合我自己水平的课罢了。这学期的眼泪大半是为这门课掉的,难受。
虽然三位助教搭出了相当不错的框架与课程网站,也付出了很多心血,但客观来说,这门课还有许多非常严重的问题,与理想中的样子还有比较遥远的距离(甚至差点成了教学事故)。如果不是因为一些特殊原因,我说不定早在第三四周的时候就退课了[哭笑]。出于对助教与老师的付出的尊重,以及比较不错的给分,这里先给五分,剩下的五分得看明年的表现了。
从表面上看,这门课最大的问题就是难度的不合理。事实上,它综合了组成原理与操作系统的知识并继续延伸,其难度只能说是有过之而无不及(绝对不是所谓比数电实验普通班还简单)。个人认为这一难度的失衡主要是由以下的原因导致的。
首先是最重要的问题,这门课的教学目标。没有一个合理的教学目标,难免会使得整个课程的设计出现偏移。据我了解,卢老师最初是希望这门课学生能够用自己写的cpu跑起来自己的操作系统或者甚至是linux,最好还能加点外设。这个目标过于宏大了,依照马哥的导师的话来说,这对博士生都算一个不小的挑战。即使这门课后来已经做了部分妥协,其教学目标仍旧较高。
老师尤其应当注意的一点是:并不是所有困难,都像童话一般地,无论任何人,只要付出努力就一定能够克服。试问如何让大三学生们在有繁重课业压力的情况下,为一门选修的1-2学分的课程,每周付出半天到一天的时间,对着花花绿绿的屏幕痛苦debug,或者甚至因为庞杂的框架或看不懂查不到的bug而无从下手?(除非你是大四的,只需要签到就可以保证及格,事实上班上的大四学长们确实大多很轻松欢乐)。抛开学生与课程的实际情况空谈努力可以说是无稽之谈。
我认为,作为一门一学期的本科生课程,仅仅将其定位为soc的入门课程,才是比较合适的。可以偏介绍性一点,专注于教授学生设计soc的整体的核心的思想,让学生对soc有一个大概的认识与体会。至于更细节更深入的研究,有兴趣的同学自然会自主去钻研探索。
还有一些关于课程设计的问题,这里也一并指出,以供参考。尽管三位助教付出了许多精力,但是从我做实验的体验来看,内容编排、框架及文档等方面都还存在着一些不足。
内容编排上,首先,前两次实验的仿真环境搭建环节过于繁琐复杂,且与soc本身关联不是很大;个人认为可以尽量缩减,只需教会学生如何高效地仿真测试,并且了解少数几处关键的、可能对debug有帮助的代码即可,至于仿真环境具体的细节与原理,并没有那么重要。其次,个人认为,此课程的内容量有点过大,其实到lab7,本课程已接近圆满完成,且部分教学内容过于细节,不会有太多收获;可以考虑适量删去课程中一些过于细节的内容,以及取消lab8综合实验或者仅作为一个选做,供有兴趣的同学继续探索。此外,实验的前后关联性太大,导致一些前面没做好的同学后面也没法儿做,或者debug时发现bug来自前面的实验(反复横跳固然真实,我去年参与龙芯杯时,也经常de后面的bug时又触动了前面的bug,但这不适合课程,给学生的体验很差);像lab4-lab5那样每过一个实验就用新的保证无错的代码框架可能是一个不错的方案。
关于实验框架,我觉得有两个问题:其一是注释问题,本课程的实验框架比较庞大,但是严重缺乏代码注释,导致学生在填空前需要先仔细研读许多相关的代码,并猜测其含义与作用。至少应该在实验填空相关的地方提供足够的注释与提示信息,以减轻学生的负担;其二是框架中挖的部分空过于细节与分散,学生做起来很痛苦,做完了也得不到太多的体会,个人认为多注重一些顶层的设计,尽量隐去一些不必要的细节,可能给学生带来的帮助更大。
文档方面,目前还有一小部分错漏,以及有部分内容过于简略,提示不足,学生看起来容易不知所云。此外,一些本学期中常见的错误也可以整理到网站上,方便以后的同学少踩坑。
关于课程设计中的内容呈现与难度控制是否合理,设计实验的助教们是很难正确感知的,(脑测更难感知)而这套课程在没有人实际体验测试过,甚至老师也没有提前做过一遍的情况下就搬上来,很难不会出现问题。建议可以找一些测评的同学,帮忙检测难度与内容的舒适度与意义等。(注意,千万不要找脑测的同学,只有真正动手去做才能得到真实可靠的感受)
此外,这门课在之后还有许多十分严峻的挑战,例如助教问题。今年是开课的第一年,请了三位助教,即使如此助教们也饱受折磨,因为同学们遇到的问题太多太奇怪太复杂,很挤占他们的个人时间。听老师说从明年起就只会配备一名助教,能否找到像马哥等一样有能力且尽心尽责愿意付出的助教,这还是个很大的问题。归根结底,还是需要卢老师本人尽量地加入到教学与答疑中来,而不是总是以“我来负责后勤工作”为借口,把教学的任务推给助教。一门课程完全依靠助教撑起来是绝对不合理的,今年还有马哥帮忙撑着,明年呢?后年呢?能保证一直有马哥这样的助教吗?只有老师自己率先用心去钻研这个课程和框架了,把边边角角都吃透了,课程质量才能稳定下来,这门课才能真正地活下去。
今年的给分还比较的宽松,但还是建议之后给出一个相对合理的分数标准,虽然老师最后可以自由调分,但教学期间的分数标准不合理的话,容易引起学生的恐慌与不安,对教学不利。
最后,对soc有浓厚兴趣的同学或者大四需要学分的同学,可以试着选这门课,也许会有不少收获与启发。其余的同学,还是建议观望一下明年的改革效果吧。从出发点上来说,这门课对于补全计科硬件部分的教学还是很有意义的,祝愿明年能够吸取教训,办的更好。
大四人来说几句幕后视角下这门课的故事~
大概在 2023 年暑假开始不久的时候,卢老师问我有没有时间来选这门新开的课程(来捧人场)。考虑到大四上课表还比较空,我就直接答应了,并在课程建设群中潜了一个暑假的水。而这段时间三名助教一直在忙着搭建整个实验框架,最后也是赶在第一次课上课之前搭好了。
作为「内部人员」,我本来是打算在每一次实验发布前就把实验写好,帮助同学们踩踩坑的,但由于巨大拖延症 + 被实验室派活 + 忙着写数电实验文档 + 还没有从暑假中缓过来,我从 DDL 领跑者逐渐变成了 DDL 烈士,最后直接躺平了。所以说大四以及不在意成绩的同学来选这门课其实很爽的(
整体而言,本学期的《计算系统综合实验》基本达到了课程建设时的目标,作为《计算机组成原理》和《操作系统原理与设计》的后续课程,在系统结构层面进行了合理的展开。但作为一门第一次开设的专业选修课,《计算系统综合实验》依然是不成熟的,整体的实验难度已经趋近于「教学事故』的级别。实际上,站在双方的立场来看,大家都没啥问题:
本学期带来如此巨大的反响,我认为的原因有几点:
1. 实验的 DDL 被统一放到了最后。老师和助教的本意是尽量减轻大家的负担,但大多数学生(在 2023 秋季学期的数电实验课程中至少为 60%)都是 DDL 驱动的,宽松的时间限制让大家直接选择无视这门课的实验,直到学期中后期临近 DDL 时才「万丈高楼平地起」。不幸的是,这门课的实验体量完全不少于数电实验,而此时其他的硬核课程也纷纷迎来了实验高峰,在多重因素的共同作用下,DDL 烈士就直接原地去世了。
2. 实验的框架需要结合大量的知识。据我所知,科大计算机学院大多数学生在大三上学期时是不会使用 Git、Linux、Makefile、C++ 的,大家的知识储备仅包含 C 和 Verilog。而这门课程的实验框架大量使用了上述内容,因此许多同学需要从零开始学习。更糟糕的是,课程的一大重心是编写 C++ 代码调试 Verilog 代码的正确性,也就是用「自己写的程序」调试「自己写的程序」,这带来了十分艰巨的 Debug 历程。
3. 框架耦合性依然过高。先前实验的设计会被后面的实验用到。也就是说,如果你某一次实验无法完成,那么后续的实验大概率也无法完成。因此一旦学生长时间被卡在某一次实验而无法继续时,后续的时间开销就无法估量了,进而对其自信心带来毁灭式的打击。
4. 课程就一个学分(坏)
上面的问题有一些很好解决,比如说为每一次实验设定固定的 DDL,但有一些问题其实还是「根深蒂固」的,比如说前置知识、学分设置等。作为教学团队的一员,我们将吸取本学期的一些经验教训,并在后续的教学中做出改变。作为学生团队的一员,我也会继续与其他学生交流意见,站在学生的视角构思课程内容的设计方案。
在最后,我要向本学期的三位助教致以诚挚的感谢。他们的付出是脚踏实地的:在很短的时间内搭建了完善的实验框架,并最终成功开设了这门课程。实验文档的撰写也花费了几位助教巨量的时间(不得不说一句马老师写文档的速度快得太逆天了)。大家都有将这门课建设得更好的意愿和信心,我也相信未来经过迭代的《计算系统综合实验》能够成为科大计算机学院的一门出色课程!
本人大三,在卢老师的“邀请(huyou)”下选了这门课,最开始获得的信息是:这门课很简单,实验都不难,“课上就能写完”。但经过实际考察,本学期的课程难度所有同学一致评价:难!
上述只是描述个人感受,下面开始分析分析这门课。
卢老师是我COD课程的老师,老师人很好,在本课程的学习过程中常常询问学生的学习进度和情况,第六周问我做到哪个实验了,我:第二个;第八周问我做到哪个实验了,我:第二个;第十周问我做到哪个实验了,我:第三个.......(ddl战神
本学期只有32人选课(第三周还是36人),但配备了三位助教,原因是本课程的框架是暑假才开始搭建的,一个人没法完成如此巨量的工作。
助教们都尽心尽力,这门课很大程度上是助教撑起来的(bushi。给他们点个赞!
本课程的学习过程实在过于坎坷。比如:makefile只是处于勉强能看懂的阶段,c++(倒还好,之前写过一些小项目),以及最难的:系统和CPU的结合。
可以大致描述一下本实验的架构:simulator和software。
simulator(仿真环境)是一个大箱子,里面装了一个小箱子(CPU_core,最开始是一个单周期CPU)。
software:包含了系统和程序,把这两者打包成一个整体(最开始的几个实验没有用到系统,而是直接构建了一个裸机环境供程序和CPU进行交互),塞到大箱子里面,然后大箱子又把打包的程序塞到小箱子里运行,可以根据小箱子的反馈进行调试。
课程学习的任务包括但不限于:读懂上述代码框架细节,lab1学makefile(会编译),lab2配置仿真环境(能调试),lab3把单周期换成流水线,lab4给流水线CPU加上特权指令处理,lab5给流水线CPU添加AXI总线协议(简化版本),lab6添加非可缓存访问,lab7添加用户程序和系统调用,lab8综合实验(实验给了很多方向,由于事情太多,选择了比较简单的添加异常处理)
上面的描述很笼统,目的是希望读者能够直观地感受到实验在做什么。
对于我自己而言,写lab4,5,6的时候很艰难,DDL战神加上这几个方向我之前完全没了解过是什么东西,因此每开一个新实验都是在面对全新的挑战.......想放弃,退课。但是最终还是在几位同学的互相帮助下挺了过来。
很好
本课程难度确实有,但是学到的东西也配得上付出。
对于要修读本课程的同学,我的建议是:课程开始的时候要提前看一下实验框架,先自己亲手摸一遍,第一遍肯定是满头问号,接着助教或者老师会带着大家过一遍框架,然后自己再摸一遍框架,把:这个课程的架构是什么样的?这个课程要解决什么问题?我们应该从哪里下手?这三个问题理解清楚。
最后希望课程越办越好,能加点学分就更好了(我这种已经修读过的也能加就更更更好了