观察者网

铁流:计算机教育出了什么问题,连龙芯都“忍不住”开源了

2016-10-24 10:36:32

CPU和操作系统是计算机系统的核心,也是我国信息技术中的薄弱部分。与此相关的《数字逻辑》、《计算机组成原理》、《计算机体系结构》、《操作系统》等课程是计算机、软件工程等专业的重要基础课程。虽然中国计算机专业课程体系完善、课程内容成熟,但在高素质计算机专业人才的培养方面还存在一些普遍性问题,并直接导致我国计算机领域的教育更多的还是教学生如何“用”计算机而不是“造”计算机,并直接引发一系列问题。相比之下,西方的计算机教育体系则更加科学合理。

10月21日,在2016中国计算机大会期间,由教育部高等学校计算机类专业教学指导委员会和中国计算机学会教育专委会主办的“面向计算机系统能力培养的龙芯CPU高校开源计划”正式启动,龙芯将GS132和GS232两款CPU核向高校和学术界开源,中国科学院大学为首的一批高校开展教育改革试点,则不失为突破人才困境和技术困境的有益尝试。

美国名校计算机教育情况

南京大学计算机科学与技术系袁春风教授的文章《计算机专业系统能力培养的探索与实践(一)》中介绍了美国四所知名高校计算机教育的情况,笔者总结归纳如下:

麻省理工学院电气工程与计算机科学系的教材《Principles ofComputer System Design: An Introduction》内容涵盖了计算机体系结构、操作系统、网络等多门课程中的重要概念,包括计算范式、并行、跨层通信、资源分配与调度、虚拟化等。它包含了一个程序员为开发高性能应用而必须知道的关于系统内部的所有关键概念和知识。

加州大学伯克利分校有一门计算机系统的必修基础课CS 61C,涉及的内容包括C语言编程、汇编程序设计、流水线CPU等硬件逻辑电路设计、Cache模拟和多核多线程编程等。CS 61C的后续课程是EECS 150,是数字系统设计课程,它要求学生完成能够实现大多数常用指令的五级流水线MIPS CPU,这类课程非常锻炼学生的实践能力,通过动手实践完成系统能力培养的螺旋式上升。

卡内基梅隆大学的计算机科学学院与斯坦福大学计算机科学系的教学内容和实验内容也大同小异,都是通过一组精心设计的C语言编程实验,使学生能够更好地了解高级语言程序转换为机器代码的过程,深刻理解底层机器的系统结构,包括指令格式、数据表示、寄存器组织、Cache结构、虚存空间的映射等,提高编制高效程序和调试程序的能力,并为后续的体系结构、编译技术、操作系统等课程打下良好的基础。

以下为美国上述四所学校计算机系统入门课程表。

从美国四校相关课程的教学内容以及设计的实验内容来看,充分说明了四所学校非常注重学生的系统能力培养,通过专门的一门课程把计算机系统的各个层次串起来,为学生完整地、全面地认识计算机系统打下了良好的基础。

中国计算机课程缺乏系统性和深度

中国计算机专业各课程大多独立设计和实施,各门课程独立规划、知识冗余及衔接脱节。计算机专业课程具有很强的系统性,难以分隔,若要真正掌握知识,就必须把所有知识点融汇贯通。

袁春风教授在其文章中提到,在国内绝大多数高校开设的课程中,很难找到可以与上述四所美国学校相提并论的有足够份量的关于计算机系统的入门课程……国内绝大多数高校基本上仅是硬件概述,既不会与高级语言编程建立关联,也没有讲清楚CPU与操作系统的关系,对于与编译相关的知识也甚少提及,在硬件设计方面也远远没有达到加州大学伯克利分校CS 61C课程的深度。

某种程度上,目前国内高校计算机系统概论、计算机系统入门或导论之类的课程,内容广而不深,什么都讲一点,什么都讲不透。而且在现今的教学体系中,前后课程知识不能有效整合与衔接,课程间知识的重复比较严重,这些因素使得学生难以系统地理解课程知识体系。

此外,国内大多数学校的教学课程基本上还是沿用传统的教学理念,没能与时俱进,不像美国那样,可以让学生真正了解如何用硬件描述语言通过FPGA来设计现代计算机硬件系统。因此,中国的计算机组成原理课程相对于与美国的计算机系统教育课程而言,在系统性、广度和深度又都相差很远。

缺乏具有工程规模的系统实践

在《面向高校系统能力培养的龙芯CPU开源计划》中提到,在现今的教学体系中,更多的是原理性、分析式教学方法,缺乏工程性、综合式教学方法。课程教学往往突出原理性知识的传授,注重是什么,有什么,教学方式趋于死记硬背,计算机体系结构的诸多概念,对于学生教学而言仍然停留在概念阶段。由于计算机系统设计相当复杂,涉及底层的软硬件基础架构,加上往往没有讲授一套有效的工程性构建方法,学生虽然知道基本概念,却通常无法进行实践,基本不具备动手能力。

另外,传统实验教学中通常不会涉及较大的工程工作量,而是若干规模相对较小的简单实验,比如做一些简单的CPU指令设计,但却没有能力和配套充足的实验平台去进行一个全系统的学习实践。在缺乏足够的工程工作量的情况下,使得复杂系统中存在的较为深刻的问题难以暴露,并导致学生虽然经过了训练,但却因训练强度不足,不能对系统有较为深刻的认识,无法接触到现代计算机系统结构中的很多经典概念,也就无法完成具有工程规模的系统级开发。

相比之下,美国麻省理工学院、加州大学伯克利分校等四所学校在计算机系统入门课程后面都开设了关于数字系统设计的课程,课程内容基本上涵盖了国内数字逻辑电路和组成原理两门课的所有内容,基本上都要求学生用EDA方式设计相对完整流水线的CPU。

缺乏具有工程规模的系统实践的直接结果就是国内缺乏拥有设计高性能CPU核的能力的人才,国内绝大多数IC设计公司还是处于购买国外的CPU核开发SOC的阶段。目前为止,仅有申威—某所、龙芯—计算所、飞腾—国防科大拥有自主设计的高性能CPU核。华为购买了ARM v8指令集授权后,计划开发用于服务器的CPU,除高薪聘请欧美人才外,在国内开出百万年薪从国防科大招贤,计算所的毕业生更是被打包式招揽。而宏芯在与IBM合作后,也从计算所拉走了一个团队,并曾高薪从龙芯挖人……这些现象一方面说明上述三家单位在技术上获得了业界普遍认可,同时,这也表明仅有少数大学和科研院所具备培养计算机专业高素质人才的能力。

应用开发人才充足,底层研发人才匮乏

龙芯首席科学家胡伟武指出,我国计算机领域的教育更多的还是教学生如何“用”计算机而不是“造”计算机,而且绝大多数高校只能培养应用程序员,而且是对计算机系统底层知之甚少的应用程序员。这直接导致国内IT人才结构失衡,应用开发型人才充足,但底层基础系统研发人才却极度匮乏,使中国庞大的IT产业建立在国外软硬件系统平台之上——在硬件上,完全依赖国外的X86和ARM,在软件上,也存在大而不强的现实状况。

软件产业强大与否,并不是取决于该国程序员数量,更不取决于软件产业创造的GDP,而在于产业标准制定权,以及是否拥有核心技术。一流企业做标准,二流企业做品牌,三流企业做产品,掌握了标准的制定权就能获取高额利润并立于不败之地。而国内软件业从教学到产业,基本上跟着西方的技术标准走,没有自己的一套技术标准。像程序员常用的编程语言、编译器、软件开发工具,基本上用的都是国外产品。

软件产业大而不强的另一个表现就是产品缺乏核心技术。以我们每天都用的手机和浏览器来说,国内各家公司推出了不少浏览器,但基本上是国外浏览器的“马甲”,所谓的国产浏览器都没有国人自己编写的浏览器内核。手机操作系统也是如此,虽然很多国产手机都有诸如Emtion、nubia之类的系统,但拨开现象看本质,这些还都是安卓操作系统的马甲,只能算是一个UI(系统界面)。而BAT等互联网巨头推出的操作系统,其本质也是基于安卓的二次开发,编写的代码仅限于重写了虚拟机。

类似的例子还有很多,某家以杀毒软件起家的互联网公司,其杀毒软件的用的是罗马尼亚的BitDefender引擎。不少厂商隔三差五就会出现于媒体聚光灯下的云解决方案,其实上也是国外开源软件(Openstack/Xen)的马甲,有些厂商虽然也贡献了少量代码,但含金量远不及宣传中那么足。国内有几十万JAVA程序员,却鲜有具备JAVA核心技术——JAVA虚拟机的研发能力。国内从事浏览器应用的团队数以千计,却少有掌握浏览器底层JS引擎研发技术,写QT的也很多,但QT库却没多少人干……国内IT企业极少参加系统相关标准制定,国内软件人才向国际开源社区贡献的代码也相对偏少。

因此,虽然中国软件产业和互联网企业创造了海量的GDP,演绎了一批造富神话,吸纳了大批就业岗位,但依附于西方技术标准、没有自己编译器和软件开发工具、应用软件强而基础软件弱已成为中国软件产业的内伤。

底层研发人才匮乏的另一个表现就是围绕国产硬件平台的应用开发能力和适配软件优化能力严重不足,国内非常多做手机APP、网游、页游的程序员,你让他们在国外技术框架下写能在X86、ARM芯片上跑的APP、网游、页游程序,他们没问题。但你让他们脱离国外技术框架去给走自主路线的龙芯、申威开发软件,就未必能做出来了,至于针对龙芯、申威平台进行软硬件磨合优化则根本无所适从,缺乏对国产系统架构平台的适配调优能力。由于不掌握从硬件角度进行软件开发与调优的能力,一旦遭遇基础软件系统不完善,就不知该如何解决。在上层应用系统与系统结构的磨合适配方面也存在一定问题——应用开发对X86架构形成依赖和惯性,而应用设计的不足被X86平台强大的性能掩盖。

推行计算机教育改革试点

若要系统能力的培养则需要从硬件开源做起,让学生有更多机会了解并设计自己的处理器,使学生掌握如何“造”计算机而不是如何“用”计算机,使学生对计算机系统融会贯通——当鼠标点一下屏幕打开一个网页的过程中,搞清楚有关浏览器、图形系统、操作系统内核等是如何协同工作的,在完成这些工作过程中指令和数据是如何在硬件系统的CPU、GPU、南北桥中流动的,CPU的微结构中取指、运算、访存等各个模块是如何配合的。

对此,中国科学院大学为首的高校联合产业界共同编撰涵盖本科、硕士、博士的《计算机体系结构》课程。在本科阶段,主要强调基础性和系统性,学习作为软硬件界面的指令系统结构,包含CPU、GPU、南北桥协同的计算机硬件结构,CPU的微结构,并行处理结构,计算机性能分析等五部分主要内容。在硕士阶段,主要介绍CPU微结构,包括指令系统结构、二进制和逻辑电路、静态流水线、动态流水线、多发射流水线、运算部件、转移猜测、高速缓存、TLB、多核对流水线的影响等。在博士阶段,主要强调实践性,通过设计真实的(而不是简化的)CPU,运行真实的(而不是简化的)操作系统,对结构设计、物理设计、操作系统做到融会贯通。目前,该课程已经在中国科学院大学讲授。

将知识融会贯通,就离不开具体实践,在龙芯将GS132和GS232两款CPU核向高校和学术界开源后,大学老师可以基于龙芯平台设计实验课程,使学生可以在真实的CPU上运行真实的操作系统,在龙芯实验平台上启动操作系统并进行性能分析。在流水线设计方面,让学生把GS132的三级静态流水线改造成五级静态流水线。在TLB和Cache设计方面,让学生在五级GS132处理器核上按MIPS32规范实现TLB及Cache,运行通用操作系统,进行有/无Cache的性能分析。在双发射结构设计方面,把GS132处理器核改造成双发射CPU,进行单发射和双发射性能比较。在动态流水线设计方面,在GS232基础上改写部分模块(如乘法器、保留站等)进行静态单发射、静态双发射、动态双发射的性能分析。

此外,龙芯还研发了CPU实验平台、操作系统实验平台、并行处理实验平台等数款龙芯教学平台,通过为高校提供完整的线上、线下实验环境,助力教学改革和计算机专业学生的系统能力培养,实现“设计真实处理器,运行真实操作系统”。

据了解,复旦大学、南开大学、南京航空航天学院、东北林大、金陵科技学院、大连海洋大学将开展基于龙芯平台的教育试点。虽然中国计算机人才质量不高、行业技术原创少、依附跟随外国技术等问题不是仅仅设计一个专业课程,增加学生工程规模的系统实践就能解决的,但这毕竟是一个好的开始,笔者还是衷心希望本次的计算机教育改革试点能解决部分现存的问题,为国家培养更多的专业人才。

(作者微信公众号:tieliu1988)

本文系观察者网独家稿件,文章内容纯属作者个人观点,不代表平台观点,未经授权,不得转载,否则将追究法律责任。关注观察者网微信guanchacn,每日阅读趣味文章。

铁流

铁流

科技、金融观察者

分享到
来源:观察者网 | 责任编辑:孙武
专题 > 中西教育
中西教育
网友推荐最新闻
切换网页版
下载观察者App
tocomment gotop