知乎、blog.miskcoo等来源林亦霖校对王菁 编辑

清华学霸直博全自主写CPU、操作系统、编译器!刘知远点赞!(附链接)

本文介绍了清华直播学霸实现了全自主写CPU、操作系统、编译器的简历。

[ 导读 ]清华大学直博面试的一则简历上了知乎热榜:“实现了在自己写的CPU上运行自己写的操作系统,以及自己实现的编译器生成的程序”。简历主人是清华计算机系本科生周聿浩同学,他顺利拿到直博名额,清华刘知远老师也表示赞赏。

最近,一个来自福州的男生突然火了,原因是知乎上一个热帖《清华大学计算机专业本科的这位同学是什么水平?》:

https://www.zhihu.com/question/345718537

提问者说,他在微博上看到清华刘知远教授的一条微博,对刘教授口中这个优秀同学产生了兴趣:

我看到微博很多人都说很牛逼,连刘知远老师都称赞,但是我好像不怎么能体会到(估计是我自身水平太低了),能有人做一个形象的比喻吗?

来源:刘知远老师微博
这名同学网名Miskcoo,他简历中“实现了在自己写的CPU上运行自己写的操作系统,以及自己实现的编译器生成的程序”一句尤其引起讨论,很多对 Miskcoo 比较了解的用户纷纷跟帖回应。

Miskcoo 本名周聿浩,毕业于福州一中,目前在清华大学计算机系就读。他曾经是一名 OIer,第一次参赛就拿到了省一。在个人博客简介上,他描述自己“感兴趣的是人工智能中偏理论方面的内容,以及一部分分析方向的数学。”

而且他本人也非常低调虚心。面对大家的一片赞誉,自己则表示获得刘知远教授认可的项目,单靠自己是做不出来的,特别要感谢一起战斗的小伙伴,包括陈晟祺、刘晓义等。

除了rCore on MIPS这个项目外,Miskcoo简历中另一个受到好评的项目经历是“NonTrivialMIPS - 十级流水双发射 MIPS 处理器”,这是清华计算机系团队在第三届 “龙芯杯” 全国大学生系统能力培养大赛中获得特等奖的项目。这是一个系统类的比赛,要求自己设计一个 CPU,在其上设计 SoC,运行操作系统等。在这个项目中,miskcoo 负责写 CPU(这次称为 NonTrivialMIPS),刘晓义写 cache,陈晟祺负责 Vivado 和 CI ,最终成功夺得特等奖!

清华大学计算机系团队夺得第三届“龙芯杯”特等奖
清华硬核系统类课程,“奋战二十天造台计算机”

我们先看引起讨论的“在自己写的CPU上运行自己写的操作系统”这个项目:

rCore on MIPS - Rust 语言实现的 Linux 兼容操作系统  2019年4月-2019年6月

  • 操作系统课程项目。rCore 是用 rust 编写的操作系统。支持了x86_64,RISCV,AArch64 三个平台。本项目主要将其移植到 MIPS32上,最终可以在组成原理课程编写的 MIPS32处理器上运行。

  • 实现了在自己写的CPU上运行自己写的操作系统,以及自己实现的编译器生成的程序。

编译器、操作系统、CPU是三个几乎像无底洞一样大的方向,实现了“在自己写的CPU上运行自己写的操作系统,以及自己实现的编译器生成的程序”究竟有多厉害,知乎用户霍华德言简意赅地评价道:

miskcoo本人则在知乎回复,强调这些工作离不开与团队的合作:

我想多说一句,因为刘老师打码的原因可能大家没有注意到,这些东西实际上是我和另外几个同学一起做的。他们都十分厉害,在前面一个龙芯杯的参赛作品的 CPU、SoC、Linux 移植以及其它一些东西里面我主要做的是 CPU 的部分。如果没有他们的话一个暑假完成这样一件事情在我的能力范围内是不太可能的。

清华大学刘知远老师补充道:

刘知远老师提到的另一段项目经历,即“NonTrivialMIPS”这个项目,在第三届 “龙芯杯” 全国大学生计算机系统能力培养大赛,陈晟祺、周聿浩、刘晓义和陈嘉杰四位同学组成的清华大学计算机系代表队(指导教师:计算机系陈康、李山山)以性能分数和综合成绩第一的表现获大赛唯一的特等奖。

该大赛由龙芯中科公司提供技术支持,参赛队伍需在龙芯公司提供的 FPGA 开发板上,自行设计 CPU 核心及 SoC,并在上面运行测试程序。清华计算机系学生代表队设计并实现了双发射 10 级流水线 CPU,支持运行最新版 Linux 内核,启动 X11 图形界面,这在大赛历史上属于首次。现场答辩环节上,同学们的优异成果得到专家们的一致好评。

图来自:清华大学新闻网

清华大学计算机系对系统原理非常重视,从教学到课程项目都非常硬核。而且近期清华计算机系的系统类课程(包括组成原理、网络原理、编译原理等)都在进行比较大的改革,miskcoo表示,团队能够写出这个项目的部分原因也是由于这些课程的安排较为合理。

下面是清华大学计算机科学与技术专业本科培养方案中的专业主修课程内容:

项目开源:rCore for MIPS32  - Linux 兼容的 rust 编写的操作系统

rCore for MIPS32这个项目已经在GitHub上开源,感兴趣的读者可以去研究一下:

Github:https://github.com/rcore-os/rCore

rCore for MIPS32 - Linux 兼容的 rust 编写的操作系统(with:陈晟祺)

这是操作系统的课程项目,rCore 是用 rust 编写的一个操作系统,也是由清华的同学编写的。在我们加入之前支持了 x86_64, RISCV32/64, AArch64 三个平台。我们主要将其移植到 MIPS32 上。它最终可以在组成原理课程编写的 MIPS32 处理器上运行。

环境:

Rust toolchain at nightly-2019-03-05
Cargo tools: cargo-xbuild
QEMU >= 3.1.0
bootimage (for x86_64)
RISCV64 GNU toolchain (for riscv32/64)
AArch64 GNU toolchain (for aarch64)
musl-cross-make (for userland musl, or download prebuilt toolchain from musl.cc)
libfuse-dev (for userland image generation)
See Travis script for details.

如何运行:

$ rustup component add rust-src llvm-tools-preview
$ cargo install cargo-binutils
$ cargo install cargo-xbuild --force
$ cargo install bootimage --version 0.5.7 --force

$ git clone https://github.com/rcore-os/rCore.git --recursive$ cd rCore/user
$ make sfsimg arch={riscv32,riscv64,x86_64,aarch64,mipsel} # requires $(arch)-linux-musl-gcc$ cd ../kernel
$ make run arch={riscv32,riscv64,x86_64,aarch64,mipsel} mode=release
$ make run arch=x86_64 mode=release pci_passthru=0000:00:00.1 # for ixgbe real nic, find its pci (bus, dev, func) first

miskcoo的其他项目还包括:

  • NonTrivialMIPS - 十级双发射顺序 MIPS32 处理器

(with:陈晟祺,刘晓义,陈嘉杰)

这是参加 “龙芯杯” 的作品,获得特等奖。我们自己实现了一个十级双发射顺序 MIPS32 处理器,包含 32 位浮点单元和一个 AES 加速单元。在其上自行设计了 SoC 同时移植了 Linux 操作系统。可以运行图形界面(X 服务)以及 Python 等一大类程序,在 OpenSSL 上利用 AES 单元加速后吞吐率大约为 10MBps(CPU 主频 80MHz,在 i7-8750H 上不利用 AESNI 指令的实现吞吐率大约为 100MBps)。同时浮点单元能够较快地绘制 Mandelbrot 集的图像,我们还实现了通过变分自编码器(VAE)生成手写数字图像等。

Github: https://github.com/miskcoo/nontrivial-mips

  • TrivialMIPS - 五级双发射顺序 MIPS32 处理器

(with:陈晟祺,姚沛然)

这是大三上学期组成原理、软件工程的联合实验,在组成原理的 ThinPad 实验板上编写的 MIPS32 处理器。由于仅有 SRAM,处理器不带有 Cache,和 “龙芯杯” 的相比较为简陋。不过,加上之后操作系统和编译原理的成果,还是实现了在自己写的 CPU 上运行自己写的操作系统,同时运行自己写的编译器生成的程序。

Github: https://github.com/trivialmips/trivialmips

  • FPGA Console - 硬件实现的 VT220 兼容终端

(with:陈晟祺)

这是大二下学期数字逻辑设计的项目,也是我的第一个 FPGA 项目。主要是通过 FPGA 接受键盘的输入,将输入转化为控制命令通过串口输出给计算机。同时也通过串口接受计算机传回的控制命令名且解析、执行,修改对应位置的字符,再将字符进行渲染通过 VGA 输出到屏幕。支持 VT220 以及部分 xterm-256color 的控制序列。

Github: https://github.com/Harry-Chen/fpga-virtual-console
  • TrivialDB - 简易 SQL 数据库引擎

这是数据库系统概论的课程项目,用 C++ 实现的一个 SQL 数据库引擎。实现了大部分常见的 SQL 语句和类型。同时支持多表连接、复杂表达式运算、多主键约束、外键约束、CHECK 约束、UNIQUE 和 DEFAULT 约束、聚集查询、利用 B + 树索引的查询优化,同时,它支持任意长度的 VARCHAR 类型。

Github: https://github.com/miskcoo/TrivialDB
  • rubik-cube - 快速魔方解算器

大学后的第一个课程项目,利用 Kociemba 算法实现的三阶魔方求解器。大约能够在 1 秒内通过不多于 32 步复原一个三阶魔方。另外,还实现了 Krof 算法,可以计算最少复原方案,不过这需要很长的时间。同时,我利用 OpenGL 对复原过程进行了动画展示。

Github: https://github.com/miskcoo/rubik-cube

其它项目(较为简单,部分没有公开。有需要代码可以联系我)

  • Mandelbrot-Render,一个高精度 Mandelbrot 渲染器。

  • SimpleTomasulo - Tomasulo 算法模拟器。

  • SimilaritySearch - 近似查找 / 近似连接算法,以及一个 “互联网打车” 应用。

  • OfficeOnline - 在线审批系统。

  • RIPRouter - 支持 RIP 协议的路由器。

  • TrivialNews - Java 实现的 Android 新闻阅读器。

  • 数独 - Qt 编写的数独,可生成及求解不同难度数独。

  • 国际跳棋 - Qt 编写的双人国际跳棋游戏。

  • 人物信息检索 - Python 编写的爬虫,可以抓取 Wikipedia 的人物信息并且显示。

最后,Miskcoo同学的主页请收好:

Miskcoo’s Space - 一个数学和计算机爱好者的博客
blog.miskcoo.com

讨论地址:

https://www.zhihu.com/question/345718537

THU数据派
THU数据派

THU数据派"基于清华,放眼世界",以扎实的理工功底闯荡“数据江湖”。发布全球大数据资讯,定期组织线下活动,分享前沿产业动态。了解清华大数据,敬请关注姐妹号“数据派THU”。

工程CPU刘知远清华大学
3
相关数据
刘知远人物

刘知远,清华大学计算机系副教授、博士生导师。主要研究方向为表示学习、知识图谱和社会计算。2011 年获得清华大学博士学位,已在 ACL、IJCAI、AAAI 等人工智能领域的著名国际期刊和会议发表相关论文 60 余篇,Google Scholar 统计引用超过 2100 次。承担多项国家自然科学基金。曾获清华大学优秀博士学位论文、中国人工智能学会优秀博士学位论文、清华大学优秀博士后、中文信息学会青年创新奖,入选中国科学青年人才托举工程、CCF-Intel 青年学者提升计划。担任中文信息学会青年工作委员会执委、副主任,中文信息学会社会媒体处理专委会委员、秘书,SCI 期刊 Frontiers of Computer Science 青年编委,ACL、COLING、IJCNLP 领域主席。

信息检索技术

信息检索(IR)是基于用于查询检索信息的任务。流行的信息检索模型包括布尔模型、向量空间模型、概率模型和语言模型。信息检索最典型和最常见的应用是搜索引擎。

变分自编码器技术

变分自编码器可用于对先验数据分布进行建模。从名字上就可以看出,它包括两部分:编码器和解码器。编码器将数据分布的高级特征映射到数据的低级表征,低级表征叫作本征向量(latent vector)。解码器吸收数据的低级表征,然后输出同样数据的高级表征。变分编码器是自动编码器的升级版本,其结构跟自动编码器是类似的,也由编码器和解码器构成。在自动编码器中,需要输入一张图片,然后将一张图片编码之后得到一个隐含向量,这比原始方法的随机取一个随机噪声更好,因为这包含着原图片的信息,然后隐含向量解码得到与原图片对应的照片。但是这样其实并不能任意生成图片,因为没有办法自己去构造隐藏向量,所以它需要通过一张图片输入编码才知道得到的隐含向量是什么,这时就可以通过变分自动编码器来解决这个问题。解决办法就是在编码过程给它增加一些限制,迫使其生成的隐含向量能够粗略的遵循一个标准正态分布,这就是其与一般的自动编码器最大的不同。这样生成一张新图片就比较容易,只需要给它一个标准正态分布的随机隐含向量,这样通过解码器就能够生成想要的图片,而不需要给它一张原始图片先编码。

数据库技术

数据库,简而言之可视为电子化的文件柜——存储电子文件的处所,用户可以对文件中的数据运行新增、截取、更新、删除等操作。 所谓“数据库”系以一定方式储存在一起、能予多个用户共享、具有尽可能小的冗余度、与应用程序彼此独立的数据集合。

逻辑技术

人工智能领域用逻辑来理解智能推理问题;它可以提供用于分析编程语言的技术,也可用作分析、表征知识或编程的工具。目前人们常用的逻辑分支有命题逻辑(Propositional Logic )以及一阶逻辑(FOL)等谓词逻辑。

操作系统技术

操作系统(英语:operating system,缩写作 OS)是管理计算机硬件与软件资源的计算机程序,同时也是计算机系统的内核与基石。操作系统需要处理如管理与配置内存、决定系统资源供需的优先次序、控制输入与输出设备、操作网络与管理文件系统等基本事务。操作系统也提供一个让用户与系统交互的操作界面。

查询技术

一般来说,查询是询问的一种形式。它在不同的学科里涵义有所不同。在信息检索领域,查询指的是数据库和信息系统对信息检索的精确要求

知乎机构

知乎作为中文互联网知名知识内容平台,致力于构建一个人人都可接入的知识分享网络,让人们便捷地与世界分享知识、经验和见解,高效获得可信赖的解答。 目前,知乎已经覆盖「问答」社区、一站式知识服务平台「知乎大学」、短内容分享功能「想法」等一系列产品和服务,并建立了包括音频、视频在内的多元媒介形式。截止 2018 年 8 月底,知乎用户数已突破 2 亿,回答数超过 1.2 亿。未来,知乎进一步加大对 AI 技术和应用的投入,构建一个由 AI 驱动的智能社区,让知识普惠每一个人。

https://www.zhihu.com
暂无评论
暂无评论~