这波啊,这波是作者运用了倒叙的修辞手法,设置悬念,吸引读者阅读兴趣;同时以回忆的角度强调自己不同时期大学生活和心态的变化,发人深省。
计算机图形学基础(A+)
代码在这:https://github.com/MashPlant/computational_graphics_2019。
本来选课的时候只选了高性能,没有选图形学的,但是寒假(也有可能是在期末复习?记不清了)在网上冲浪的时候偶然看到了smallpt,感觉这东西好有意思,所以准备把图形学也选了。寒假的时候就开始写大作业了,用Rust写的,不过后来证明其实这个时候写的东西对后来真正用到的代码并没有太大贡献。这个时候是用我的破Surface跑的,4G内存 + 2C4T的CPU,我也是佩服自己等结果的耐心。
刚开学的时候配了一台台式机,R7 2700 + GTX 1060,主要就是为了做图形学和人智导。用这个确实快多了,但是也想跑出更大更精细的图,所以还是要花很多时间。
有一次我突发奇想,既然我的程序开始之后场景里有什么实体就不会再变了,那我可以直接生成代码,直接把每个实体的行为写死在代码里,这不是肯定快多了?后面就按照这个方向走了,这样就自由很多了,我还自学了一下CUDA,可以生成用GPU渲染的代码,跑简单的场景GPU是快太多了,但是越复杂就越没有什么优势了,应该还是我写的不行。这样来看其实Rust没啥意义了,用Python来做这个代码生成的工作也是一样的,反正最后跑的是朴实无华的C++。
到这其实这个作业都还没有布置。布置作业的习题课我去一听,好像Ray Tracing得分有点低啊,我是不是得再做一个SPPM?其实后来没有真正做出来,SPPM跑出来的图片有明显的瑕疵。我还尝试在网上找了很多资料,想学一下有没有可以加速的技术,但是我其实一开始就没有理解其中的数学原理,所以网上的资料基本也都看不懂。位数不多的收获是找到了一个KD-Tree的论文,在GPU上这个KD-Tree的速度确实还可以,但是也没法像简单场景一样比CPU有好几个数量级的提升,应该也是我写的不行。
后面一直卷啊卷,用高性能的服务器来跑我的图,十台机器,每台12C24T啊,这可是快多了。最后硬跑了一张带色散的图出来,色散的来源是在折射的界面上对折射光的颜色和折射角做随机,这一随机,收敛的计算量要求不知道高了多少。
最后找助教检查的时候跟他说我这是SPPM跑出来的,我也不知道他心里怀不怀疑,反正从分数来看他是没有表现出什么怀疑。
其实以后我肯定不会做图形学这个方向的,我也不知道我做这么多是为了什么,要分数的话A+已经太高了,白白浪费了这么多的时间,而且也没有学到什么东西。我是不是心理有点问题啊?
操作系统(A)
本来按照chyyuu的要求,我应该寒假就把ucore实验给做了,但是我寒假学托福去了,而且其实心理也有点排斥,感觉很难,自己一个人做不动。最后到开学了也没有做,去听了一下往年大实验的报告,感觉自己没这个水平,不敢去参加。
开始上课的时候感觉很有些慌,这个时候我没有学过组原,不知道会有多大的影响。这是为数不多的非数学课我记笔记的了,其实记下来的东西也没什么意义,可能就是把ppt上的东西抄一遍。学了一段时间之后感觉渐渐好起来了,这东西还是相当有意思的,而且也都是完全可以理解的。
但是这可能并不是什么好心态,我喜欢这门课,这就意味着我看到别人做出那样的成果的时候,心里会很不舒服,为什么我就是做不出来呢?其实我根本没有开始做的勇气,但是就是嫉妒别人的成果,反正就是一种很病态的心理吧。我感觉我的心态就是从这里开始就渐渐发生变化了,在这门课之前我感觉自己在大学里过的是算是“开心”的,做什么事情都感觉能有收获,所以也愿意去做;但是从这之后,我就经常有这种无力感:他们比我优秀那么多,这种工作我去做的话肯定不会有结果的,而且在少数我真的付出过努力去尝试的事情里面,我也确实没有做出来任何结果,这就越发强化了这个心态。我也会怀疑自己的兴趣,我真的对系统方向感兴趣吗,这样什么东西也做不出来也配称感兴趣吗?
我现在心态稍微好了一点,不过大概是这种概念上的好:
上面说的这些逻辑有些混乱,纯属胡言乱语,大家当个笑话看就好。
这门课有期中和期末两次考试,我感觉都是有点难度的,我做的也都不是很好,都是大概90分的样子,最后能得个A算老师给面子了。
数值分析(A-)
算是数学课,所以我上的还是相当认真的。ywj讲课基本就是在念ppt,不过这对我来说就已经相当足够了,多少老师ppt都念不好呢,尤其是数学课的ppt给计算机系的老师念,这能念好已经算是水平不错了好吧。
有一个实验,代码在这:https://github.com/MashPlant/numerical_analysis。就是挑了课本上的几个实验题,自己再选其中几个做一下。我心血来潮用了Rust写,其实显然并不是很合适,有些地方还是写的很别扭的。不过现在来看,自从学了Rust之后,应该所有不限语言的项目我都是用Rust写的,所以这也算正常。
最后考试的时候感觉题目贼简单,状态贼好,最后得了个A-是我没想到的,这种题目我都能失误的吗?回想起来,唯一一个能失误的应该是一个多项式插值的题,我在往年题中见过类似的,可能考试的时候没有想太仔细就写了。当然也有可能是别的题做错了,但是这个题目是现在我唯一能回忆起来的,因为当时我看到它就觉得特别稳。
高性能计算导论(A)
也是ywj的课,从这就可以看出来能念好ppt确实是需要水平的了,他就念不好这门课的ppt。上课用的教材和ppt明显都是很老的,这算是水平相当差的一本黑书了吧,其实这也没办法,它在以前可能是质量很高的,但是一直不更新那肯定就落后了,它不更新我们的老师肯定也不想着讲点新内容,就一直用着呗。
有几次平时作业,我把它放在REKCARC-TSC-UHT上了(https://github.com/PKUanonym/REKCARC-TSC-UHT/tree/master/大二下/高性能计算导论),其实真不用像我一样报告写这么多的,我纯粹为了画图能画完整一点,担心助教扣分,但是其实随便做一点图就能够达到助教的要求了,倒是代码可能要求会更高一些。
众所周知C/C++里面的volatile
和Java里面的不是一个意思,使用场景也完全不一样,书上对volatile
的用法完全是错误的。看这个书的年龄,说不定它才是万恶之源,可能很多错误的说法就是从这里来的。当时我心血来潮研究了一下内存序,甚至还用我的手机跑了一下程序,结果写在hw4的报告里了。但是到现在其实我也没有理解内存序,我还是不会用,这东西确实太难了,还是老实点用锁吧,别搞那么多花里胡哨的。
考试好像到现在也没有题目流出来,我记得大概就是选择题+填空题+计算/简答题,只要熟记ppt应该是没有什么难度。我记得有一道计算cache命中率的大题,计算机系的课程是不是课均要求掌握cache命中率计算?
人工智能导论(A-)
上的很难受的一门课,第一堂课就听的昏昏欲睡,感觉msp讲课好像很”用力”的样子,但是就是没有什么效果,况且我对这个方向也没有兴趣。不过这个课我最后还是全勤了,这在现在来看几乎是不可想象的,不是应该就上过一两次课这样更加合理吗?
全勤归全勤,我可是什么也没听进去,讲到什么决策树,遗传算法的时候,感觉在听天书。记忆犹新的是,应该是在讲谓词逻辑的时候,我真睡着了,从第一节课的一半直接睡到了第二节课的一半,这是我记忆中我第一次真的在课上睡着,我敢说是从小学开始的第一次。以前我一直不理解,课上都能睡着的吗,老师在台上那么大声地讲着呢。现在我明白了,他讲的东西如果我不感兴趣,声音再大也没有什么意义,就像是背景的白噪音一样,反而起到一个安神助眠的作用。
预留了两周左右复习,ppt过了好多遍,感觉还是记不牢,能考的东西太多了,基本又都沾点算法。最后考试感觉还是有难度的,尽力发挥吧,A-算是可以的成绩了,虽然我也感觉自己都做出来了,不知道能错在哪里。
有三个实验,第一个拼音输入法比较简单。第二个四子棋要求必须是Windows环境,为此我专门买了一块硬盘装了Windows。四子棋的代码我写的可以说相当有自己的风格,比如为了避开动态内存分配,我用模板参数来表示棋盘的尺寸,输入的棋盘参数范围是确定的,但是并不能在编译期确定,这怎么办呢?写一个大switch
,类似于:
1 | switch (x) { |
第三个实验就是训练神经网络做情感分析,RNN我是真的训练不好,最后效果比我用C++手写的全连接网络(这是一个拓展功能)还差,而且甚至到现在我也没有理解RNN到底是怎么工作的。GPU训练速度还是可以的,虽然我这个GPU也不是什么高端产品。
数字逻辑设计(A-)/实验(A)
数设就是前半学期讲课,期中的时候就是期末考试了,因此我们学的内容比上数电的学的少多了,后来他们跟我说的一些东西我根本听不懂。考试我记得有道题我写的特别复杂,后来出来一想感觉是把题目意思理解错了,明明有更简单的理解方法,不知道这个扣了我多少分。
后半学期就做一个大作业,我们是用VHDL写的一个基于象棋的游戏,就是手机上的天天象棋里的那种翻棋什么的,这个其实挺好玩的,在手机上一玩就容易上头。我主要写的是逻辑部分,全都是用模拟器在跑,基本上没有怎么碰板子,涉及到跟其他硬件交互的地方我也基本没有参与。我的队友在机房调试,有几次遇到解决不了的问题就把我叫过去一起看,没遇到的话就是他自己写。感觉我又划水过去了,毕竟这种东西如果只是写点逻辑代码那应该是不会学到什么新东西的。最后看大家展示的时候心里真的是充满敬畏和仰慕。
数字逻辑实验,平时的实验就是连线或者写代码,都是做好了直接去检查,所以大部分都不难。最难的应该是有一次要求写计时器,这里面的D触发器我是真的按照书上D触发器内部的连线写的电路,因为我觉得他们的要求就是这样的,调了半天也没调好,这东西就是玄学。结果后来一看很多人都直接用if-else
了,也没有影响分数。
考试有连线和编程两个部分,连线就是搭一个电路,大概是从0开始计数到自己学号的后三位之类的,编程题目是现场告诉你的,用VHDL或者Verilog写一个程序,具体是啥我忘记了,反正很简单。考试前一天我从早上开始就在宿舍里连线,中途发现器件有问题还跑去东主楼调换了一次,直到晚饭左右才第一次跑起来。这还不够,我把它拆了,在纸上记下每一根线两端的位置,然后照着这张纸再搭了一次,又跑起来了,这才算准备充分了。附图一张:
第二天早上去考试,花了十分钟左右搭好了。给我印象最深的就是机房真的很热,可以说搭得汗如雨下。出了机房,心情甚好,准备去看一下复联,掏出手机一看刚好是昨天下映了。
毛概(B+)
寒假要做一个调研报告,我就随便写了一个仙桃的调研报告,其实根本没做任何调研,就是过年回去了一趟拍了几张照片。
上课是在一个大教室里,应该是在三教,讲的怎么样我也不清楚,反正我没怎么听。有几次讨论,心里是真的虚。一次是关于调研报告的,一次是自己选的主题,我都不知道自己在说什么,就信口开河乱说吧,现在也记不得了。
最后还有一个口述史报告要写,当然肯定也没人给我口述,就自己硬编。两个报告我写的字数都超出了他的字数要求很多,但是我觉得我没法再写短了,而且最后结果证明写的长也没有什么用。
物理实验B(2)(A-)
现在我一个实验也想不起来了,这种东西就是纯恶心人的。报告我每次都是手写的,因为我当时还不会LaTex,要是我去打公式的话应该会更慢一些。反正就是”借鉴”一下前辈留下来的报告,这次我”借鉴”的比上次更彻底,更认真,更仔细了,所以就拿了A-。
二年级男生游泳(D+)
本来选的是棒球,第一堂课棒球老师说:“你们如果感觉成绩不够一定要找我重测,我上学期就挂了一个58分的毕业班学生。”。他说的是重测,不是商量改分数,我要是能重测及格我为什么不一开始就及格?后来在选课截止前半小时左右,发现有一个空闲的游泳,就退了棒球选上了游泳。这真的是我的运气好,要是我没有选上游泳,我真不知道结果会怎么样。
每次课都重复一样的内容,就是一直在游泳,感觉自己也没什么长进,根本游不快。D+这个分数可能真的是我应得的分数,是所有小分加起来的结果,说实话我的体育能够凭自己的实力及格就已经很不错了,只是这个老师真的不把分数往上调一点,我也没有什么办法。
计算机系统结构(W)
我就不指出具体是哪位老师了(反正一共就两位,今年我就选了另一位),这课上的我真是恶心。这也是典型的没有念好ppt的水平的老师,每次课开始前还喜欢讲点什么玄学之类的东西,然后课上对着英文的ppt,不知道他在说什么,我怀疑他自己知不知道自己在说什么?课本也不说清楚是哪本,群里问也没人回,搞的我第一次作业做成另一本书上的题了(你那么喜欢英文的ppt干嘛要用中文的书啊?)。
课上喜欢点名,你自己看不出来吗,就这么点人,你能点到谁在啊。我印象尤为深刻的一次是讲非线性流水线调度的时候,他说:“你们接下来一定要认真听,这个自己下去肯定看不懂。”我认真听了,遗憾的是没有听懂,英文的ppt也看不太懂,百度上随便一搜讲得贼清楚。
后来听说要做带GUI的Tomasulo模拟器。好!崩!撤!卖!溜!
今年重选这门课,我越发不知道他怎么能把课教成这样的,换个老师这不是能讲的很好的吗,在群里也跟同学有互动,有答疑。幸好我退了。