马建仓有话说
著名哲学家梁漱溟先生晚年口述一书中提出了一个问题:这个世界会好吗? 敏锐的哲人有他的回答。开源界也有类似的疑问。 "都说开源改变了世界,那么开源让世界变好了吗?"
2013 年的夏天,Gitee 正式上线。我们以「代码」会友,至今汇聚了中国本土 800 万 + 开发者,携手走过了 9 年时光。迈向第十年,我们想要向大家提供属于 Gitee 的回答。
目前我们没法轻易说出准确答案,不同人的见解、经历以及体会存在差异,回答自然不同。但是开发者是我们的底色,开源是运行的逻辑。想要回答这个问题,需要从开源开发者的角度出发。或许只有了解真实的开发者在开源过程中的所见所做所想,才能找到这个答案。
所以这一次,我们决定将焦点转向开发者,以记录者的身份,成为开发者的笔记,讲述程序员技术生活的所见所闻所想,关于开源的一切故事,共同探寻”开源让世界变好了吗?“的答案。 只要你在 Gitee 上开源,有精彩的开源故事,有关于开源的独特见解,你都是我们关注的对象。
首期《开发者笔记》记录了一群共同建设 RISC-V 生态的开源爱好者。 他们和所维护的开源处理器“香山”,立志向 Linux 看齐,希望能活个 30 年。我们曾经在 Gitee《封面人物》 中以核心人物的形式展现开源项目背后的维护者。本期,我们将从每一位开发者的视角讲述香山项目开发过程中的心路历程、项目背后的八卦故事,提供关于香山团队的回答。
师父传真功
一场关于开源指令集 RISC-V 的创新产学研实践正在中国科学院计算技术研究所和中国科学院大学进行。
人才危机的产学研探索
包云岗: 我是中科院计算所研究员,现担任计算所副所长、国科大计算机学院副院长,是香山项目和“一生一芯”计划的发起人。同时我也兼任中国开放指令生态(RISC-V)联盟秘书长、 RISC-V 国际基金会理事和中国计算机学会 CCF 开源发展委员会副主任。
2018 年 11 月 8 日的世界互联网大会上,中国开放指令生态(RISC-V)联盟正式成立。当天晚上,在乌镇的一家餐馆庆祝时,坐在我边上的一位老师问了个问题: “以后打算怎么做开源芯片生态?” 其实这也是在 2018 年期间我经常问自己的一个问题。当时我脑中常有一个较粗糙的想法——能不能让学生参与到开源芯片生态建设中。听了那位老师的问题,我的脑海又浮现出这个想法。于是在饭桌上,我一边整理思路一边介绍如何将教学和开源芯片结合起来,这应该是“一生一芯”计划的最初萌芽。
202108.北京.香山团队与微核芯的老师
2020 年 6 月 11 日,在中科院支持下,联合鹏城实验室和微核芯一起开发了开源处理器香山项目,并正式建代码仓库。2021 年 6 月 21 号在中国 RISC-V 峰会上正式对外公布,而 2021 年正好是 Linux 诞生 30 周年。
大学研讨课上的创新实践
张科: 我是中科院计算所高级工程师张科。2016年春季学期开始,我在中国科学院大学讲授本科生的《计算机组成原理》理论及配套的实验研讨课。为方便教学和实验设备管理,我带领计算所科研工程团队研制了一套具有 FPGA 可编程算力的在线实验教学云平台,同学们可以随时随地地在云平台上开展简易处理器核的设计与验证。
2019 年 8 月,国科大计算机学院启动了“一生一芯”开源处理器教学流片实践项目计划。我有幸参与了这个教学实践的创新过程,也见证了许多“一生一芯”学员从课堂到实验室的蜕变,他们已逐渐成为名副其实的处理器设计专家。未来我希望与教学团队进一步夯实计算机系统方向理论课、实验研讨课与拔尖实践项目的有机衔接和贯通式实践训练,为我国集成电路与处理器芯片人才培养进行更多有益的探索和尝试。
重工业科研模式需要通力协作
唐丹: 我是中科院计算所高级工程师,目前在香山团队中主要担任产品经理和项目经理的角色。管理工作在科研中也很重要。包云岗老师倡导的“重工业科研模式” 的特点是具有明确的技术目标且需要大量的科研人员通力协作。在统一的技术目标情况下,管理工作与科研工作相对容易协调和融合。
帮学生寻找思路,而非解决Bug
解壁伟: 我是中科院计算所助理研究员解壁伟。“一生一芯”的目标是,培养学生的计算机系统能力与处理器芯片设计能力,并将其融入到学生培养的各个环节,鼓励学生主动探索和积极实践,提供关键节点的引导,引导学生寻找思路,而非帮学生解决 Bug。
同时,也希望参与该计划的每位学生能通过亲自实践,实现 “设计出自己一生中第一颗芯片” 的目标。“一生一芯”提倡开源开放的理念,探索以开源社区的运营方式,依靠 Web 平台和助教群体,扩大组织规模。
202109.一生一芯.后端
余子濠: 我是从中科院计算所博士毕业的余子濠。 “一生一芯”的很多同学都是从零基础开始学习芯片设计,不仅掌握了芯片设计能力,还具备了独立拆解和解决问题的能力,后来加入“香山”团队和开源社区,或在不同的企业和学校继续从事芯片方向的工作。每位学生的学习记录和实验报告都是公开可见的。我们会定期分析和讨论同学们的学习记录,分析大家遇到的问题,逐步改善教学和组织流程。
徒弟好修行
如何成为开源项目的贡献者?
本科课程的机缘
张林隽: 我是中科院计算所硕士二年级的学生。最开始进入组里实习,是因为大三选了包云岗老师的操作系统课,因为某次作业做得还不错而被包老师认识;当时刚开始学习组成原理、体系结构之类的课程,感觉自己对这一领域也挺感兴趣的,所以就来包老师这里实习,后来也参与了首期"一生一芯"。
这个项目之后我就开始准备毕设,也是基于“果壳(NutShell)” 开展的。毕设尾声,唐丹老师告诉大家会开发一款开源高性能 RISC-V 核,给大家拉了一个微信群,就很自然而然地成为了“香山”团队的成员。
蔺嘉炜: 我和林隽一样,也是中科院计算所硕士二年级的学生。 读本科的时候,我对 CPU 非常感兴趣,便在大二和大三的时候根据课程学习和教科书写了简单的顺序流水线处理器和乱序处理器。但是当时经常被 CPU 启动 Linux 时由于未知 Bug 挂掉所困扰,于是就在寻找更好的调试方法。
这时,正好了解到了计算所包老师团队正在做的相关工作,尤其是组内余子濠师兄开发的 difftest 框架和NEMU模拟器。这些基础工具能够快速定位 CPU 的错误点并大幅提高 CPU 以及对应操作系统、应用程序的调试效率。
此外,我在西北工业大学读本科的时候,了解过 Chisel 这门语言,大二和大三写的 CPU 全是用 Chisel 完成的。而香山团队是当时国内几乎唯一一个在深入的使用和推广基于 Chisel 的敏捷开发的科研团队,这两点让我觉得需求比较契合,最后在大三下学期有幸通过保研加入了包老师的团队。
张紫飞: 我是香山团队的一员,也是包老师的学生,目前是中科院计算所直博二年级学生。大学时候比较迷茫。没有方向,就只能跟随大众的脚步。身边一些同学,对计算机有着强烈的热情,他们很早开始就跟着老师搞科研、参加比赛。我们之间的差距变得越来越大,这让我更加迷茫。不过因为操作系统成绩比较好,也产生了一点自信,就来包老师那里科研实习了。只是当时只是看看论文,跑跑实验,大部分时间都在“划水摸鱼”。
202109.一生一芯.前端
后面听说了“一生一芯”计划,为了提升自己,我鼓起勇气报名参加。虽然“一生一芯”的目标只是一个小核,但是对当时能力比较弱的我来说,压力还是很大。幸运的是,我也从中学到很多。不仅是知识上的丰富,更多的是学习习惯,项目同步和交流能力的提高。因为有了“一生一芯”的历练,参加香山的时候,才能够更加从容。
王华强: 目前,我在中科院计算所硕士二年级读书。大四的时候通过种种渠道得知包云岗老师组正在内部筹办第一期“一生一芯”, 和导师交流后加入“一生一芯”项目。之前曾经计划去做一些存储系统相关的工作, 不过由于参加了这个项目, 方向发生了巨大的变化(笑)。
落地毕设的机会
勾凌睿: 我是在中科院计算所读博士一年级的勾凌睿。研一下学期集中教学结束后,我回到组里开始干活,很高兴能参与到香山核开发,因为这样我终于能把本科毕设的内容在真实处理器上实现了。我还记得本科计算机体系结构的实验课内容是写一个五级流水的 MIPS 处理器,当时在过程中体会到了一些乐趣,于是对这个项目更加期待。
邹江瑞: 我是深圳大学硕士三年级的邹江瑞。本科专业是软件工程,接触的大都是软件开发的相关知识,期间也产生对计算机底层的实现的好奇,如:电脑上各式各样的软件如何在真实硬件中运作等问题。读研选择导师时我就想找一个计算机体系结构方面的导师,正好遇上了蔡晔老师,之后他介绍我去鹏城实验室实习。当时有两个研究方向选择,一个是开源 EDA 方向,另一个就是开源芯片方向,我很快就决定选择更贴近计算机体系结构的开源芯片方向,之后就加入了香山团队。
研究瓶颈的机遇
刘彤: 我是中科院计算所的工程师,在项目中主要负责 SoC 系统验证,IP 验证和前后端代码交付等。我不是科班出身,本科读的是商学院,这是我第一次参与芯片设计开发,但在整个项目中的收获是十分巨大的。
项目的过程中,我遇到了许多困难,最主要的是整个系统的复杂性超出了最初的预估。我还记得,在香山回片后,PCB 和芯片第一版先送到了我的手上,因为正好赶上春节前期,如果自己不能按时完成系统启动,将会影响整个香山的调试计划。那段时间我从一个小白被迫变成了可以看懂电路图,调试板卡的入门选手,同时还要经常去华强北买各种配件进行测试,想尽办法验证一个又一个的猜测。如今,我已被香港科技大学(广州)录取为电子信息方向的博士生,即将开始攻读博士学位。
张传奇: 我现在是中科院计算所直博四年级的学生。参加这个项目前我在做标签化体系结构的相关工作,重点研究的是如何用软件硬件结合的手段给多核应用提供 QoS 的保障。当时,香山急需人手我就中断了研究来协助香山开发,现在香山已有稳定迭代的版本。
踩坑实录
程序员的一生,不止要写出很多 Bug,还要 Debug。
在 Bug 与 Debug 之间反复横跳
周意可: 我是南京大学直博一年级的学生。在开发的过程中,最常踩的“坑”是:自己实现的功能一开始通过了基础的测试,但一段时间之后就暴露出了意料之外的 Bug。
最初系统输出的日志/波形实在是太多,完全不知道怎么 Debug,只能碰碰运气,在自己觉得可能有问题的地方改一改。如果遇到猜不到的 Bug,那就束手无策了。
202106.香山于上海处理器中心
为了解决这个“坑”,我一方面找了经验丰富的大佬们请教,收获了大量调试的心得,主要是定位 Bug 的思路;另一方面也花了不少时间学习处理器整体的工作原理,理解重要模块的工作过程。随着项目推进,自己也解决了一些 Bug 后,对自己的 Debug 能力越来越自信了,尤其是在调试新 Bug 的时候,也不会担心找不到问题了。
张发旺: 我是深圳大学硕士三年级的张发旺,研二研三期间我曾在中科院计算所实习,参与香山项目。
香山第一版"雁栖湖架构"设计尾声时,仿真还不是特别稳定,跑程序调试时还是会报错,那时起我开始投入大量时间 Debug。由于前期设计都只关注自己的设计模块,处理器内所有的结构并不熟悉,调试进度很慢,有时候一天都在找一个 Bug。但是“慢就是快”,调试过程中不断跟踪信息,能接触到各个模块,慢慢摸清处理器里模块间交互,建立起了一个比较系统的视角,对这个过程的感觉从枯燥变得有成就感,很多处理器结构和敏捷开发的疑惑也在这个过程中茅塞顿开。
李乾若: 我是中科院计算所硕士二年级的李乾若。以前我对芯片设计没什么概念,就看各种科技新闻/评测觉得高性能 CPU 挺有意思的。来了之后才发现比想象中的复杂很多。现在的压力主要取决于项目情况,有 DDL 时压力比较大,写出了 Bug 找不出来也会有压力。
技术说服要讲证据
王凯帆: 我是中科院计算所直博二年级的王凯帆。项目开发过程遇到的挑战其实很多,我觉得最大的挑战是,随着开发的不断深入,大家意识到高性能处理器的设计空间非常大,很多设计思路不分对错,只是一种权衡。
每个人可能都有自己的想法和判断,经常会产生技术上的矛盾与争论,互相也难以说服对方,导致一些优化无法推进、停滞不前。为了解决这样的问题,我们大家后来形成了共识,就是要寻找证据(比如性能分析结果、其他处理器参考设计等)来进行客观讨论;如果证据不充分,那么就实际动手把一种方案或多种方案实现出来,通过实际表现来判断思路的正确性。
新手不能总是纸上谈兵
谭佳展: 目前,我是北京大学硕士三年级的学生。在香山中,我主要负责了一级数据 Cache 的预取模块设计工作。单就预取工作而言,之前并未实际做过,于是开始去广泛阅读与硬件预取相关的论文和资料。
我花了大量时间在理论的分析、不同算法的选择、不同硬件背景下的分析上,以至于实际开发工程迟迟没有动手。后边在香山组的其它同学提醒下,他们做工程都是先尝试着设计一版初步的,然后再不断改进。而我总想是先把理论上的问题彻底研究明白了,再去动手一次性完成,只是这样下来一是耽搁了开发时间,二是错过了通过实际开发仿真中暴露出问题对深入理解理论的机会。
202106.嘉兴会议
万事开头难,只要有了第一版预取模块,把基本框架搭起来,后边再慢慢进行性能调优就好了。作为当时刚接手香山的新手很容易陷入纸上谈兵的境地,这也算我遇到的最大挑战吧。
开源与我
开源给我带来了什么?
Linux 是我的开源启蒙
包云岗: 香山团队的成员几乎都是开源软件的爱好者和受益者。我自己最早是在大学期间开始接触到 Linux,后来到中科院计算所上研究生时买了毛德操老师(国内知名计算机专家,浙大教授)的《Linux内核源代码情景分析》,便开始“啃" Linux 源代码。Linux 对我自身的学习与后续工作都有很大影响,可以说是我的开源启蒙。
至于说,我们希望香山能活 30 年,是一种愿景。说实话我们也不知道它是不是真的能活 30 年。第一步是要让香山能被工业界真正用起来。我认为只有这样,香山才有可能真正活下来。 这个过程一定也会面临各种困难和挑战,但我们也会尽最大的努力去实现这个目标。
开源共享“轮子和造轮子”
金越: 我是中科院计算所硕士二年级的金越。我认为,开源的意义在于知识共享。可能香山的设计和业界相距甚远,但是我们把香山处理器开源,就是将过去的技术进行一个汇总和适应性重构,让开发者们知道这样的设计是可以流片并且能达到一个高性能跑分结果的。
这样每个人也能从别人的代码或者设计思路里大概了解一个高性能处理器的某个子部件是个怎样的框架。更重要的是,开源这种方式可以把“轮子”和“造轮子”的方式都共享到社区,开发者们不仅能使用高性能处理器的 IP,还能使用我们的工具加速自己的开发验证过程。当然,我们当下距离这个目标还有很多工作要做。
只有开源才能让我放心
周耀阳: 我是中科院计算所直博五年级的周耀阳。我算是个开源爱好者。除了香山以外,我比较关注 GEM5 模拟器,因为这个是我进行研究的重要工具。个人爱好方面,我比较关注 Android Open Source Project (AOSP),尤其是 Pierre-Hugues Husson (PHH) 的treble项目。我也给 PHH 发过 patch。我的手机的操作系统经常都是自己编译的,至少是可以获取源码的。因为手机是一个可以获得非常多隐私的渠道,只有开源的、可以亲自进行源码审查的操作系统才能让我放心,它有没有窃取隐私、悄悄上传、滥用监控。
我认为,不仅操作系统、芯片这些关键的基础设施应该开源来确保不侵犯用户隐私,而且现在最流行的推荐算法也应该开源。因为推荐算法会通过信息流影响人的世界观。只有对商业公司的推荐算法进行审查,才能确认他们是否通过推荐算法来为用户建立成瘾性、塑造群体意识。
“搬砖”日常
香山科研人的"搬砖"记录。
师生之间的「传声筒」是必要的
徐易难: 目前,我是中科院计算所直博三年级的学生。刚开始参与香山项目时,我只是一个普通的研一学生,没有项目经验,也没有做过这么多人之间沟通协调的工作,一开始只能硬着头皮尝试去做。
在项目过程中,我更多的是一个传话筒的角色。因为老师们比较忙,没有那么多时间精力来安排所有的细枝末节,所以就由我来把老师们的一些安排具体地传达到学生团队里面。然而,这样导致时间不够分配,一方面我需要参与香山项目的开发,另一方面需要处理一些日常的沟通协调事务,经常出现白天花了很多时间做其他事情、晚上才有大段空闲时间写代码的情况。但是,在我看来,沟通协调其实是任何一个项目组中都需要有人来承担的事情,团队是需要建设与维护的,拥有融洽的工作氛围、共同努力目标的团队会有更高的工作效率。
正反馈让我感到快乐
张紫飞: 参加香山的经历总体上是非常快乐的。因为我们一直在创造,不断有新的进展,新的正反馈,也能感受到自己的进步。很怀念最开始开发香山的时候,那时北京出现新冠疫情,我们就全体到深圳鹏城实验室封闭开发了三个月。那段时间,我们一起从零开始,每天都在学习新知识。研究生入学之后,需要两边跑,既要上课,也要开发香山,节奏就开始不可控。临近期末,课程压力扑面而来,那时确实是压力最大的时候,这种压力更多是身体上的压力,不是精神上的压力。
202007.香山于鹏城实验室
王诲喆: 我是中科院计算所博士三年级王诲喆。参与香山的过程中接触许多高端平台,比如 Cadence 的 Palladium Z1 仿真加速器、Synopsys 的 HAPS FPGA 原型平台以及搭载市面最大逻辑资源的 FPGA 芯片 VU19P 的原型平台。我也学习到了很多平时难以接触到的知识和工具。在进行 FPGA 全系统验证的时候,我根据自己擅长的方式,选择直接运行 Linux 以及内核自带的正式的驱动程序来测试外设 IP 模块。解决了一些边缘问题后,看到系统马上就可以运行较为复杂的网络程序和硬盘(SD卡)操作,感受到了一种一通百通的感觉。
香山扎根向上成长
刘志刚: 我是香山第一版项目 L1 DCache 还有 L2 Cache 的负责人刘志刚,2021 年 6 月从中科院计算所硕士毕业后加入了阿里平头哥半导体做 GPGPU 架构设计。我在香山项目待了一年,在工业界也待了一整年了。我认为,香山项目对于我个人投身芯片产业是有决定性影响的。
在这个项目中,我找到了做处理器的挑战,成就感以及乐趣。也培养了从事芯片架构必备的基础能力。曾经面对具体的领域中具体的问题时,也不知道该怎样灵活组织手头的这些理论工具,通过香山项目这个复杂艰难而又具体的工程技术难题,我逐渐把 feature 都实现一遍,对它们的 PPA 有概念了。同时也将这些点组织成框架了,能更系统地看待处理器的设计与实现了。这对于我进入工业界大有裨益。
通过香山项目的训练,我现在在平头哥 GPGPU 团队里,是少数几个能从框架的 CUDA 代码一路分析到硬件模块的性能问题的人。
在项目过程中,包老师一直在给我们讲长期主义,做好手头的事情,不要急着看结果,相信做好的每件事情都会在未来的某一天产生积极的影响。 这些理念,在项目过程中,甚至在我在公司的这一年,都在一再应验,我对此也深信不疑。我曾经不想写的 HTML 作业,还有许多无疾而终的项目,虽然没有产生任何直接成果,但它们都是有价值的,都会在未来的某个瞬间,成为你的某个灵感,成为你的经验,释放它的价值。开发开源处理器香山的这些日子,让我从一个兴趣导向,心情起起落落的神经刀(球迷用语,指发挥不稳定)选手,变成了负责任的心态平和的芯片工作者。