前言
这个是疫情封锁期间(被关在寝室时候)我为了让自己不因为网课而颓废,以及给无聊的封控生活增加一点“实感”而记录的手记。
在搬运到新博客时我将原来的三篇(手记1,2,3,分别记录了三周的事情)合成了一篇。以下是原文内容。
手记1
网课实在是太容易让人松懈了,在(又)度过一个非常颓废的周末后,决定以文字的方式记录一下自己每天都在干什么。
每天都要干的事
每日任务时间为 1h~1h30min,超过就不干了。(单词要坚持)
上课的话要集中精力,有早八可以选择午睡。
- 每三天要拿一次饭。
- 算法:每天上 OI Wiki 看一个算法 or 复习一个算法 or 复习算法课的一个知识,半小时。
- 组合:每天花十几分钟看一看那个 note。
- 概率论:每天花十几分钟翻翻书。
- 操作系统:每天看 MOS。无要求,但是每周必须看完一块。
- ML:每天看看 ppt。
- 单词。
每周作业列表
- 组合每周五。
- ML notebook 每两周。
- 算法每三周。
- 概率论每周好几次,很散。
- 马原,每周提问题,以及到我们组要做 ppt。
项目列表
- FUSE 先写出个 demo
- seL4 把 tutorial 做完
- 动态编译 AOT、JIT,等作业消息
- ML 大作业
3.27
太摸了,今天看了好久的番剧。不过把 ML 的逻辑回归 notebook 看完了。新的一周开始了,要紧的是算法作业。以及这是这个手记的诞生日。
3.28
昨天完成的不错,算法看了一下均摊分析,大概是理解了。以及算法把第一题做了,第二题有一点想法,第三题应该也做完了。组合并没有看,摸了。概率论做完了 Homework 8。os 看了几页内存管理部分的。单词背了 20 个托福。
3.29
os 看了进程切换和内存部分,空闲内存管理(bitmap、freelist)以及虚存。下次该看 fs 了。
fuse 配好了环境,挂载了一个简单的 fs。
今天课比较多,机器学习上了 Adam、dropout(正则化)、CNN、RNN 和一点点 LSTM。os 课翘了,改天看。算法课继续讲了 makespan minimum,greedy 和 LPT 两种的结果比率,以及 online 版本的这个问题。
单词背了 20 个。
概率论整理了一下经典的几个分布。
堀与宫村看了快10集。今天要看完了。
明天算法和组合都要赶紧做了。
3.30
fuse 看了一下一些 sample 项目,感觉已经大概有思路了。这周末可以动工(fs game 或者别的什么更有意思的?);概率论研究了一个很有意思的问题——随机打台球会不会掉到袋里,涉及到关于丢番图逼近的一些问题(Kronecker 逼近定理)。组合做了四题,以及纠正了我舍友一直以来对自同构的奇妙误解。
算法今天摸了。
概率论上课讲了边际分布和随机变量独立的相关概念,以及顺序统计量。
单词背了。shroud n. 裹尸布 老是忘记。
MOS 比较晚才看。
把堀与宫村看完了。总之就是非常可爱的 OVA 也看了。可以考虑下一部番剧。
3.31
今天课特别多,中午睡了个午觉。单词背了。
今天是组合数学日,把组合数学作业给补完了。
上午的系统课讲了 fs 里的 mount 以及系统初始化的过程(initrd,initramfs…),下午的算法课先继续了 Makespan Minimum (Real Time)的算法下界证明,然后讲了 dp。
晚上和女朋友出去散步。最近因为心里老是觉得她有点忽视我,有点烦闷。说实话有点吃她舍友的醋(也可能是我最近恋爱番看多了qwq)
感觉周四确实是会被组合占据的一天。ml 和概率论就暂时先搁置了。
4.1
周五是快乐日,不干正事还是比较心安理得的。日常的活儿倒是都干了,os 现在开始看 Linux 部分,过了一遍 process 和 boot 部分。
上午概率论因为核酸原因基本没有听。还是讲联合分布之类的,后面得找时间补了;下午组合,主要在讲作业。后面讲了一些极图理论的东西,Erdos-Stone 定理。
晚上和朋友聊了一会儿天、打了会儿游戏,算法想了一会儿,只想出了一小题。摸之。
4.2 & 4.3
幸福的周末捏,两天能有一天工作量就不错了。
这周是算法周,于是周末大部分时间被算法作业占了。这次的算法作业主要是关于图论的,又又又复习了一遍 tarjan(dfs 树,真是妙啊)
和女朋友幸福逛校园,春天的你交还是有许多好看的花的。
对了,关于单词,虽然最近都有在背但是没有认真在 iPad 上写一遍。明天补一补这三天的份。MOS 看了一些(也不是很多)。周六看了南大 jyy 的网课,感觉讲得好好(比我们老师好多了)。明天该开动 fuse 了,目标是先写一个简单的,支持大部分接口的文件系统。
新开了一部番剧,《紫罗兰的永恒花园》,给叔叔氪了一发大会员。同学说好像可以等优惠,100- 就可以拿到。嘛,无所谓了。
以及把宿舍打扫了一下,将疫情期间的物资用纸箱子,收集归类整理起来了(室友还发给他女朋友看了,乐),宿舍瞬间变阳间!最近很糟,但也没有那么糟。
4.4 & 4.5
清明假期。这两天最重要的事是待在宿舍写了两天 fuse,总算把我的 ffs 主体写完了。剩下的工作(game engine部分与其它debug)可以之后搞搞。
不过这个占了我好多时间,导致这两天其他事情基本没干,就背了单词。不过倒没必要谴责自己,毕竟这个其实也挺难写的(尤其是用纯C,还不是c99,写起来那真叫一个酸爽。不过也让我底层语言的码力提高了不少。)
现在每天晚上基本形成了和女朋友看番的习惯(晚间黄金档 x)。想起来昨天晚上她突然抱着我的胳膊说“今晚啥时候看紫罗兰”,乐死我了(人口老龄化)。
数学这几天有点搁置。明天大概是概率论 + os + 组合时间。把 os 的书面作业做一下,组合不要求做完。概率论要好好巩固一遍,最近对它太摸了。
手记2
4.6
今日难词:tantalizing,诱人的(tempting,attractive)
今天做了组合作业(还剩两题),感觉这次组合作业还是比较容易的。明天磨一磨把最后一题做了,还剩一题估计程序跑了。
概率论又被核酸冲掉了。。。晚上整理了一下到现在的概率论进度,一路复习到了随机向量的条件分布。感觉测度最重要的思想(生成、扩张)确实起了不少的作用。期望与积分没有太细看,是一个很像勒贝格积分的东西。
os 看了点书,看到了 Linux 的页面替换算法 RFRA。也不是很懂。
今天和女朋友一起把紫罗兰看完了,最后少佐还是没有出现。总体来说这部番还是挺感人的,最值得吹爆的就是京阿尼的作画。
4.7
今天日常组合时间,被组合最后一题拖了一晚上。不过最后修修改改终于给出了一个很简洁的证法。
当了学讲主持人,也算是终于把学讲的活儿干完啦。(原来不用把麦克风凑到嘴边就能听到)
下午配了一会儿环境,把服务器上的 python 升级了一下(万恶的 _ctypes,我要杀了你),以及把 jupyter notebook 跑起来了; 以及 RDPWrap 挂掉了,于是又把我的 windows 升成了专业版。终于可以稳定地跑起来远程桌面了。
晚上看了 SVM,终于理解了它在干啥了。但是这块的数学还真有点复杂,并且记忆部分占多数。
4.8
(不想记)
(大概是有在做事情吧)
4.9 & 4.10
周末。这周末主要完成这周的两个ddl,os 书面作业和机器学习SVM的notebook。以及看了一些 JIT 材料,为高级编译做准备。
周六体验了一次疫情的教超排队,6点30分出门排,排到9点30才买到东西(3小时半精致睡眠)。
os 书面作业主要讲内存管理方面,手模了一下 buddy(其实还想学一下 slab,但好像都没细讲),过了一下页面替换算法,以及了解了 DMA、MMU、IOMMU 等。
SVM notebook 主要还是式子推导。感觉核心公式就是超平面的那个距离公式,后面的魔法操作(拉格朗日 min max 转 max min 对偶问题 + SMO)还是参考论文过了一遍代码。加上 kernel function 就能达到非线性效果。
周日忘了背单词,使用了时光机。(QAQ)
最近在和女朋友看宝石之国。这个番最大的亮点我觉得是它的设定。但是动画部分并没有讲很多,后面得去补漫画惹。
手记3
已经隔离一个月多了。校内的情况已经好起来了,但是整个上海的情况比较糟糕。目前还是封校状态。
本周任务:
- 组合作业 周五
- 算法 贪心 下周一
- 概率论作业
- 高级编译 写完解释器
4.11
看了一整天 JIT,发现网上好多 demo 都是基于 brainf**k 解释器的。大概原理就是它们会找循环然后把循环给 compiled 起来成为 x86 code,执行方式是直接内嵌汇编(把这段存在内存里的 x86 code 强制转换为函数指针,跳转执行)
仍然对我们的 JIT 有点迷。我们这个应该是从 LLVM IR 入手的,JIT 生成的是 riscv assembly,那如何做这个 context switch?如果是 method-based 当然好做,但是如果基本单元是 basic block,感觉有点奇怪,而且效率不一定高吧。
不过大体的思想是知道了。话说原来高级语言的后端也叫 virtual machine,感觉很奇妙。看了一些知名虚拟机的案例,Hotspot VM 有两个 compiler,client compiler 采用的是保守的优化策略(注重 compile time),server compiler 采用的是激进的优化策略(注重 compile quality)。微软的 .NET 虚拟机叫 CLR。还有大名鼎鼎的 V8,一个 JavaScript Engine(这又是什么新名字,应该也是虚拟机),以及 oracle 最新的 graal。
JIT 为什么快?相比解释执行,快在缓存了字节码——因为解释执行的大头(对于 fetch-dispatch-execute 循环,其实 execute 不是大头,主要的是不断循环中 fd 的那些 overhead)在于解释器本身的代码,当然是不如直接跑机器码的(当然我对我们作业这个存疑),而且 JIT 还有一些优化,更厉害一点;相比 AOT,JIT 的信息更多,profiling 后能进行更充分的优化。不过它的缺点就是:效率不一定快,而且还占用 runtime。
代码没写多少,难以下笔啊。给项目起了个响亮的名字——DarkSwordVM,dsvm,因为也许会像黑暗剑一样太监。复用了一些 Masterball 的代码,不过很多估计是要重写了(codegen 部分应该可以再用?不是很清楚)
4.12
今天课很多,但是越来越不爱听课了。os 还是在讲 fs,机器学习开始讲树模型了。算法继续 dp,讲了 dp 的单调队列优化(经典滑窗最值)、斜率优化。
鉴证了一下午,做了很多奇怪的测试,感觉测试结果也是奇奇怪怪的,但是里面的问题还挺好玩的。
写了一会儿 interpreter。还是基于 antlr 解析 llvm,虽然它比较线性,但是语法还是有点复杂的。
把宝石之国的最后一集看了,感觉完结得挺仓促了(可能经费不够用了),但是改编的也不错,让动画也构成了一个整体。就是悬念有点多。
4.13
星期三。摸鱼日。
上午的概率论成功完整地被核酸冲掉了。经典核酸排队背单词。回来看了一下,好像还是在讲积分的性质。
回来抢到了麦当劳,感觉非常的不错(xie kui),后面有点困就昏睡了,一直睡到了下午三点多,挂了个 ZY-INS。
继续推进 interpreter 进度。这周内写完吧。
把概率论第九次作业做完了,量有点多。
明天晚上之前要确定机器学习选题,组合作业也得做。今天看了一会儿各方面的研究成果,还是没想好选啥。(Transformer 为啥有个这个表情:🤗,感觉看着好好笑啊)
4.14
昨天熬夜熬太迟了,今天差点没起来。
os 终于开始讲 IO 了(虽然 DMA 啥的作业好像都体验过了),晕晕乎乎地继续做完看没看完的 paper,终于确定选题选 CTR Prediction。现在的问题:一是要弄啥模型,二是 GPU 上哪整。罢了,这周末先搞算法好了。
下午学子讲坛,摸鱼;算法课,讲了四边形不等式优化 dp,具体就是说对一类区间 dp,代价满足四边形不等式,使得其决策具有单调性,故 for 中间点的时候可以有一个上界、一个下界,复杂度从 $n^3$ 降到 $n^2$。
晚上做明天交的组合作业。感觉难度比起上次低了,但是第六题实在不会做(搜了下好像叫 Chvatal-Erdos 定理?)
再晚写了会儿 interpreter。果然 memory 还是要用 byte 来仿真。
本周 DDL 已干掉两个,周末任务:算法 + 解释器写完。虽然算法延迟了但还是写完为好。周末再把 notebook3 做了,反向传播和多层感知机,有点神秘。
4.15
啊,周五,你好温柔。
早上听概率论,讲的是可测函数的几种收敛:a.e. 收敛、a.e. 一致收敛和依测度收敛。
下午是组合,主要讲作业题。讲了 Chvatal-Erdos 定理(据说是 Erdos 在一辆车上想出来的?)
晚上因为女朋友发了张别人网课用薇尔莉特的模型,突然心血来潮开始玩 VSeeFace,最后也是捏了几个 vrm 皮,成功体验一波虚拟主播的感觉。而且这玩意儿可以很方便推流到腾讯会议,挺方便整活儿的。
依然按照周五惯例,并没有做什么事。
4.16 & 4.17
很忙的周末。首先是解决 JIT 解释器的大锅,最后终于跑通了(跑了个 a+b problem),然后是团委的工作也收拾掉了,以及编译器 code review 结束。
周末花了好多时间写 OJ——其实大多时间都花在想怎么实现简单,以及设计功能上。不过还是对 JavaScript 不太熟悉。以后好好加油吧。
周末学弟们机考,老年选手也跟着看了看题,并且成功在考试时做掉一题(其实是线段树水题 qaq),感觉算法水平下降了不少。
算法作业想了第一题(虽然有点乱),第二题 k=1 有了点思路。
周末最重要的当然是摸鱼。但是下周感觉是个死亡周,努力活下去!本周的任务基本算全部完成,不错。