来源:知乎、blog.miskcoo等
陈嘉杰(陈嘉杰个人资料)
本文约3300字,建议阅读8分钟。
本文介绍了清华直播学霸实现了全自主写CPU、操作系统、编译器的简历。
[导读]清华大学直博面试的一则简历上了知乎热榜:“实现了在自己写的CPU上运行自己写的操作系统,以及自己实现的编译器生成的程序”。简历主人是清华计算机系本科生周聿浩同学,他顺利拿到直博名额,清华刘知远老师也表示赞赏。
最近,一个来自福州的男生突然火了,原因是知乎上一个热帖《清华大学计算机专业本科的这位同学是什么水平?》:
提问者说,他在微博上看到清华刘知远教授的一条微博,对刘教授口中这个优秀同学产生了兴趣:
我看到微博很多人都说很牛逼,连刘知远老师都称赞,但是我好像不怎么能体会到(估计是我自身水平太低了),能有人做一个形象的比喻吗?
来源:刘知远老师微博
这名同学网名Miskcoo,他简历中“实现了在自己写的CPU上运行自己写的操作系统,以及自己实现的编译器生成的程序”一句尤其引起讨论,很多对Miskcoo比较了解的用户纷纷跟帖回应。
Miskcoo本名周聿浩,毕业于福州一中,目前在清华大学计算机系就读。他曾经是一名OIer,第一次参赛就拿到了省一。在个人博客简介上,他描述自己“感兴趣的是人工智能中偏理论方面的内容,以及一部分分析方向的数学。”
而且他本人也非常低调虚心。面对大家的一片赞誉,自己则表示获得刘知远教授认可的项目,单靠自己是做不出来的,特别要感谢一起战斗的小伙伴,包括陈晟祺、刘晓义等。
除了rCoreonMIPS这个项目外,Miskcoo简历中另一个受到好评的项目经历是“NonTrivialMIPS-十级流水双发射MIPS处理器”,这是清华计算机系团队在第三届“龙芯杯”全国大学生系统能力培养大赛中获得特等奖的项目。这是一个系统类的比赛,要求自己设计一个CPU,在其上设计SoC,运行操作系统等。在这个项目中,miskcoo负责写CPU(这次称为NonTrivialMIPS),刘晓义写cache,陈晟祺负责Vivado和CI,最终成功夺得特等奖!
清华大学计算机系团队夺得第三届“龙芯杯”特等奖
清华硬核系统类课程,“奋战二十天造台计算机”
我们先看引起讨论的“在自己写的CPU上运行自己写的操作系统”这个项目:
rCoreonMIPS-Rust语言实现的Linux兼容操作系统2019年4月-2019年6月
编译器、操作系统、CPU是三个几乎像无底洞一样大的方向,实现了“在自己写的CPU上运行自己写的操作系统,以及自己实现的编译器生成的程序”究竟有多厉害,知乎用户霍华德言简意赅地评价道:
miskcoo本人则在知乎回复,强调这些工作离不开与团队的合作:
清华大学刘知远老师补充道:
刘知远老师提到的另一段项目经历,即“NonTrivialMIPS”这个项目,在第三届“龙芯杯”全国大学生计算机系统能力培养大赛,陈晟祺、周聿浩、刘晓义和陈嘉杰四位同学组成的清华大学计算机系代表队(指导教师:计算机系陈康、李山山)以性能分数和综合成绩第一的表现获大赛唯一的特等奖。
该大赛由龙芯中科公司提供技术支持,参赛队伍需在龙芯公司提供的FPGA开发板上,自行设计CPU核心及SoC,并在上面运行测试程序。清华计算机系学生代表队设计并实现了双发射10级流水线CPU,支持运行最新版Linux内核,启动X11图形界面,这在大赛历史上属于首次。现场答辩环节上,同学们的优异成果得到专家们的一致好评。
图来自:清华大学新闻网
清华大学计算机系对系统原理非常重视,从教学到课程项目都非常硬核。而且近期清华计算机系的系统类课程(包括组成原理、网络原理、编译原理等)都在进行比较大的改革,miskcoo表示,团队能够写出这个项目的部分原因也是由于这些课程的安排较为合理。
下面是清华大学计算机科学与技术专业本科培养方案中的专业主修课程内容:
项目开源:rCoreforMIPS32-Linux兼容的rust编写的操作系统
rCoreforMIPS32这个项目已经在GitHub上开源,感兴趣的读者可以去研究一下:
Github:-os/rCore
rCoreforMIPS32-Linux兼容的rust编写的操作系统(with:陈晟祺)
这是操作系统的课程项目,rCore是用rust编写的一个操作系统,也是由清华的同学编写的。在我们加入之前支持了x86_64,RISCV32/64,AArch64三个平台。我们主要将其移植到MIPS32上。它最终可以在组成原理课程编写的MIPS32处理器上运行。
环境:
Rusttoolchainatnightly-2019-03-05
Cargotools:cargo-xbuild
QEMU>=3.1.0
bootimage(forx86_64)
RISCV64GNUtoolchain(forriscv32/64)
AArch64GNUtoolchain(foraarch64)
musl-cross-make(foruserlandmusl,ordownloadprebuilttoolchainfrommusl.cc)
libfuse-dev(foruserlandimagegeneration)
SeeTravisscriptfordetails.
如何运行:
$rustupcomponentaddrust-srcllvm-tools-preview
$cargoinstallcargo-binutils
$cargoinstallcargo-xbuild--force
$cargoinstallbootimage--version0.5.7--force
$gitclone-os/rCore.git--recursive$cdrCore/user
$makesfsimgarch={riscv32,riscv64,x86_64,aarch64,mipsel}#requires$(arch)-linux-musl-gcc$cd../kernel
$makerunarch={riscv32,riscv64,x86_64,aarch64,mipsel}mode=release
$makerunarch=x86_64mode=releasepci_passthru=0000:00:00.1#forixgberealnic,finditspci(bus,dev,func)first
miskcoo的其他项目还包括:
(with:陈晟祺,刘晓义,陈嘉杰)
这是参加“龙芯杯”的作品,获得特等奖。我们自己实现了一个十级双发射顺序MIPS32处理器,包含32位浮点单元和一个AES加速单元。在其上自行设计了SoC同时移植了Linux操作系统。可以运行图形界面(X服务)以及Python等一大类程序,在OpenSSL上利用AES单元加速后吞吐率大约为10MBps(CPU主频80MHz,在i7-8750H上不利用AESNI指令的实现吞吐率大约为100MBps)。同时浮点单元能够较快地绘制Mandelbrot集的图像,我们还实现了通过变分自编码器(VAE)生成手写数字图像等。
Github:-mips
(with:陈晟祺,姚沛然)
这是大三上学期组成原理、软件工程的联合实验,在组成原理的ThinPad实验板上编写的MIPS32处理器。由于仅有SRAM,处理器不带有Cache,和“龙芯杯”的相比较为简陋。不过,加上之后操作系统和编译原理的成果,还是实现了在自己写的CPU上运行自己写的操作系统,同时运行自己写的编译器生成的程序。
Github:
(with:陈晟祺)
这是大二下学期数字逻辑设计的项目,也是我的第一个FPGA项目。主要是通过FPGA接受键盘的输入,将输入转化为控制命令通过串口输出给计算机。同时也通过串口接受计算机传回的控制命令名且解析、执行,修改对应位置的字符,再将字符进行渲染通过VGA输出到屏幕。支持VT220以及部分xterm-256color的控制序列。
Github:-Chen/fpga-virtual-console
这是数据库系统概论的课程项目,用C++实现的一个SQL数据库引擎。实现了大部分常见的SQL语句和类型。同时支持多表连接、复杂表达式运算、多主键约束、外键约束、CHECK约束、UNIQUE和DEFAULT约束、聚集查询、利用B+树索引的查询优化,同时,它支持任意长度的VARCHAR类型。
Github:
大学后的第一个课程项目,利用Kociemba算法实现的三阶魔方求解器。大约能够在1秒内通过不多于32步复原一个三阶魔方。另外,还实现了Krof算法,可以计算最少复原方案,不过这需要很长的时间。同时,我利用OpenGL对复原过程进行了动画展示。
Github:-cube
其它项目(较为简单,部分没有公开。有需要代码可以联系我)
最后,Miskcoo同学的主页请收好:
Miskcoo’sSpace-一个数学和计算机爱好者的博客
blog.miskcoo.com
讨论地址:
编辑:王菁
校对:林亦霖
—完—
关注清华-青岛数据科学研究院官方微信公众平台“THU数据派”及姊妹号“数据派THU”获取更多讲座福利及优质内容。
发表评论