精华区 [关闭][返回]

当前位置:网易精华区>>讨论区精华>>各行各业>>IT人论坛>>【工作与心得】>>Re:(转载)我们的CPU - 中科院计算所Godson CPU设计手记

主题:Re:(转载)我们的CPU - 中科院计算所Godson CPU设计手记
发信人: ninja_xena()
整理人: hnyjchuhong(2001-11-19 19:04:24), 站内信件
我有时候觉得自己比周扒皮还狠,但我们课题组的成员确实很玩命。有好几次,我在早上六、七点钟打开实验室的门,发现有些人手里扶着鼠标就靠在椅子上睡着了。我是容易受感动的人,看到这样的场景忍不住想落泪。但我还是叫醒他们问他们昨天晚上的进展并让他们接着干。我有一个学生,近两个月来很少在凌晨4点前睡觉,而常常到八、九点钟我上班后就会把他叫起来,因为我急于了解昨晚的进展。记得有一次我们在深夜趁等计算机的运行结果,大家聊天,说到了生死。他说最不希望老死,看着自己的生命一点点耗尽。我们有一种观点,我们现在落后这么多,别人不比我们笨,如果大家都一样一周五天一天8小时上班,恐怕很难赶上人家,惟有象当年搞“两弹一星”一样拼命,至少得累死一批人。惟有这样,我们才能不受欺负,我们的子孙才有希望重新做到“犯我大汉者,虽远必诛之我经常说,一盆花用水浇灌固然能够盛开,但用心血浇灌会更鲜艳。我们的CPU事业就是一朵花,我们在用心血浇灌她。我们给我们设计的处理器取了一个很有传统特色的小名叫“狗剩”,希望名字贱一点容易养大,音译成英文就是Godson。

至于我们墙上的另外一句口号“求实、求实、求实、创新”是对计算所所训“求实、创新”的一个注解和发挥。因为我感到现在中国科技界太浮躁,炒作的人多,做事的人少。因此希望我们组的人把工作做扎实,少吹牛多做事。其中第一个求实是关于做学问的目的,要为了做学问而做学问,而不是为了名和利。要真正做到‘人不知而不愠’。这一点说起来容易,做起来很难。象我们在计算所工作的人,大概在利上不是非常计较,只要日子过得下去就行了,但在名上就很难看得开,这一点,我自己虽然做不到,但心向往之。第二个求实是关于做学问的态度,就是要把工作做到实处,就是要艰苦奋斗,就是不要为了发表论文而写文章。在科研上哪怕是一点点的创新,都需要大量踏实的工作,这是客观规律,谁也躲不过。我们在科研中经常碰到有些人不愿做具体繁琐的工作,一心想发表论文。这种现象很普遍,我自己也这样,但以后要力戒之。第三个求实是关于做学问的方法,要勇于实践,不要纸上谈兵。就是要‘学而时习之’,就是认识和实践的不断循环往复。学问并不仅仅是知识渊博,更多的是体验和感觉。没有对所做工作的深刻体验,就难以发现问题,就难以创新。而这些体验,别人的文章里是看不来的,没有经过身体力行的大量实现在很多人认为我国没有自己的处理器,主要是因为工艺水平上不去,因此,处理器设计不应是计算所的事情,而是做微电子设计的人的工作。诚然,回顾我们国家的处理器设计历史,在80年代后全面落后的一个重要原因是没有自己的制造工艺,导致处理器设计队伍整体上垮掉,人员流失。但现在情况发生了变化,投片已经没有大问题,主要是没有设计。而处理器设计决不仅仅是逻辑设计。处理器设计是大系统,惟有对包括操作系统、编译、体系结构、I/O等在内的整个计算机有全局的把握才能设计出高性能处理器。就好象一个公司,固定资产和资金只提供了必要的条件,关键还在于管理。在通用计算机中,操作系统和系统结构设计的的配合尤为重要,有些指令专门是为操作系统设计的,尤其是在系统安全、存储管理、原子操作、例外处理等方面。我在用我们自己的结构实现MIPS指令系统的过程中,有一个深刻的体会,就是一个指令系统十几年来一直在发展是有它的道理的(MIPS指令系统经历了MIPS I、MIPS II、MIPS III、MIPS IV的发展过程)。有时候通过对操作系统的分析了解到一些指令的妙用,体会到设计者设置这些指令的初衷,真是让人拍案叫绝。所以,我一直很庆幸我们采用了兼容的做法,如果自己设计指令系统,没有十几年的实践,是不会完善的。



放眼中国在体系结构、操作系统、编译方面的综合力量比计算所强的不多(我比较佩服的其它单位只有一家),因此计算所做CPU设计是很有优势的。虽然前几年的折腾使计算所元气大伤,但底子还在。在开始做CPU设计之初,我对这件事情的复杂性估计不足(这是一个深刻教训),只是领着八、九个研究生做。后来在项目逐渐展开后,发现现有的人力顶多能做完逻辑设计,要把通用操作系统启动起来是远远不够的。无奈之下,只好从原来做机群的组和做嵌入式操作系统的组中调了几个操作系统高手过来,事情马上有了起色。比如,我们要在C模拟器上运行操作系统,需要对操作系统内核进行裁剪和修改(如去掉一些与主板配置紧密相关的初始化),这种事情没有对操作系统的深入把握是不会做的。后来,又从其他地方得到一些人员补充(我现在体会到电影上打仗时指挥员为什么非常重视预备队)。现在,我们组已经有了三、五十人的规模,兵不在多在于精,这些人全是年轻的枪手,素质很高,又很玩命。就我目前所做的事情来说,计算所几乎是“要什么人才有什么计算所的科研环境很好,尤其是体现在后勤服务上。举几个小例子。第一个是工作展开后通宵加班多了起来,我们自己因地制宜地在一些桌子上铺上铺盖搭了几张简陋的床。当邓书记知道这种情况后,马上找人腾出一间小屋子,放了六张床,大大改善了我们加班时的休息环境。书记还让人每天为加班的人准备饼干、方便面等方便食品。第二个例子是,随着工作的不断深入,组里需要不断添置新的微机,但机器都是随用随买(因为以前没有经验,不知道要买多少机器)。对此,业务处的同志们总是全力配合,保证组里及时用上新机器。最快的一次,我在上午11:30向业务处王玉洁老师提出购机申请,下午1:30机器已经送到实验室。这在一个财务制度健全、审批严格的事业单位是很难想象的,更何况是下班时间。第三个例子是有一次我们急需一块Matrox G200显卡,但由于是几年前的产品,跑遍了中关村也没有买到。万般无奈,只得通过EMAIL向所内的部分老师紧急求助,热心的业务处于天波老师马上在网络上发布这个消息,不到一个小时,在王贞松老师的帮助下,就找到了这块显卡。这至少减掉了我们两个星期的工作量,因为如果用其它显卡,我们得自己写驱动程序。有效的后勤保障使我有时后觉得不把事情做好,对不起这些热心帮助我们的人。

  我们在前一段时间的教训有两个。一是工程经验不足,主要体现在以做研究的方法来做工程,以及对任务的难度估计不足,科研力量配备不够,导致初期效率不高。幸亏后来工程经验丰富的张志敏老师的加盟大大扭转了我们以做研究的方法做工程项目的局面,提出了“后墙不倒”的目标。此外,也幸亏计算所技术储备雄厚,要什么人有什么人,使得我们得以在后期提高效率。不过,我们目前在文档管理等方面还是很存在问题的。第二个教训是对工具重视不够。现在做处理器设计,EDA工具是十分重要的。我们由于不够重视EDA工具,吃了不少亏。有一次布线布不通,只要修改一下设置就行,可惜我们都不会,折下面我可以介绍一下Godson的技术特点。了解了这些技术特点,就可以了解为什么Godson工作在12.5MHz时就有50MHz的486的性能。Godson的流水线结构是我自己觉得比较得意的地方。设计的时候没有参考其它处理器的流水线,完全是凭感觉。Godson流水线包括了若干目前处理器设计中最先进的技术,如流水线动态调度,Tomasulo算法,寄存器重命名,猜测执行,精确例外处理,64位的浮点运算部件,CACHE技术等,并且在某些方面有所创新。流水线设计中比较困难的两个问题是例外的处理和相关的解决。首先我们把例外处理与流水线紧密地耦合在一起,在数据通路的设计中例外结果和正常结果并行,在执行过程中例外结果和正常结果不加区别,只有在指令结束阶段才对例外结果进行特殊处理。此外,我们把转移指令猜测错误作为一种特殊例外,利用例外处理的取消和保持现场精确逻辑。这样不仅可以简化设计,而且可以让转移指令后面猜测执行的指令尽可能地往下执行。我们的流水线是动态流水线,采用de-coupled结构,控制逻辑分布在每个模块之中。在流水线的控制中,“让流水线流起来”是我们设计的理念。在指令流水线中,数据相关和控制相关都会引起流水线等待,如后面指令用到前面指令的结果或后面指令是否执行由前面转移指令成功与否决定。对于因数据相关引起的等待,我们的原则是尽量推迟到不得不等的时候才等。即对于源数据未准备好的指令,指令译码和发射时并不停下来等待数据(简单的静态流水线通常在译码时停下来等待未准备好得数据,堵住了后面指令的继续执行),而是建立数据依赖关系,由功能部件通过侦听结果总线解决相关。这样数据结果一出来,等待它的指令马上可以进行运算,不用经过写回到寄存器再读出来的过程,而且前面指令的等待不会堵塞后面指令的继续执行。对于控制相关,我们也是让转移分支的指令先猜测地执行起来,到实在不得不停下来时才等待转移目标的确定。如果转移猜测成功就立即继续前进,如果转移猜测不成功,就利用例外处理的指令撤消机制恢复正确现场。流水线设计中,“简洁、流畅”是是我们追求的目标,前者保证流水级间的控制简单,延迟少,后者保证流水线的高性能。在我们联调成功后到现在,已经对流水线进行了4次较大调整,每次都更加简洁、流畅。我想在正式投片前还会有几次调整。此外,Godson的浮点运算部件流水线设计也有自己的特点。

Godson体系结构的另外一个特点是结构灵活,模块化好,可以根据不同的需求对功能部件进行任意裁剪以满足不同的应用。由于Godson的流水线采用de-coupled结构,控制逻辑分布在每个模块之中。增加或减少功能模块对其它部分没什么影响。如对于某些嵌入式应用,不需浮点部件,只要去掉浮点ALU、浮点乘法、以及浮点寄存器模块,不用对其它模块做任何修改。

系统安全设计也是Godson的一个重要特点。Godson系统除了实现MIPS系统要求的安全机制外,还针对网络攻击实现了一种新的访问限制机制。缓冲区溢出是一种非常普遍、非常危险的漏洞,是目前大多数网络攻击所采取的办法。在各种操作系统、应用软件中广泛存在。利用缓冲区溢出攻击,可以导致程序运行失败、系统死机、重新启动等后果。更为严重的是,可以利用它执行非授权指令,甚至可以取得系统特权,进而进行各种非法操作。Godson通过允许操作系统对堆栈段的取指进行限制,从而有效地防范利用缓冲区溢出进行的攻击。

当然,Godson在目前设计上还存在一些缺陷,主要是对CACHE重视不够。目前的设计只有4KB的指令CACHE和4KB的数据CACHE,都是直接相联(这与FPGA容量有关,目前的设计已经使用了150万门的FPGA的85%-90%的面积)。在性能测试时发现对访存要求较高的程序Godson的性能不够理想。如当Godson运行在12.5MHz时,对于访存不敏感的程序,100MHZ主频的IDT 64474 CPU(R4000内核)的性能是Godson的3-5倍,但对于访存敏感的程序,IDT64474 的性能是Godson的6-8倍。IDT 64474有16KB的指令CACHE和16KB的数据CACHE,都是二路组相联,无论是CACHE容量和组织方式都比Godson强。在投片前一定要对CACHE部分进行改进.

  关于Godson的未来发展,我们有一个雄心勃勃的计划。第一步是在目前设计的基础上经过优化后进行标准单元的投片,主频在200-300MHz左右,争取2002年完成,用于个人工作站/瘦客户端PC及电子政务等。第二步是设计双发射64位的结构(目前为单发射、定点32位、浮点64位),投片主频为500MHz左右,争取2003-2004年完成。用于高性能服务器,也可以搭成机群做高性能计算。第三步争取在处理器间并行上有所突破,设计基于Crossbar的大SMP结点,每个SMP结点16-64个CPU,用于高性能计算。在做处理器设计之前,我们做了近十年的共享存储系统结构研究,但受囿于CPU和操作系统,只能纸上谈兵,顶多做做软件实现。现在自己做CPU,可以为所欲为,好象被束缚的手脚一下子得到了自由。如果能够把我们在共享存储并行系统方面十来年的积累做到实用系统中去,简直是爽呆。如果可能的话,争取实现串行程序采用多线程技术自动并行化,这需要编译、操作系统及系统结构的全面突破。没做多少事,写了这么多,是不是有点过分。写这种东西其实比写程序还累。
2001年9月
              胡伟武
 
责任编辑:ideal(01-11-18 11:28) [关闭窗口][转寄邮箱] 
 
  
==>提示信息<==
  欢迎您对此文章发表您的个人意见,在您发表前请您注意以下问题:
  1、您必须是 LinuxAid 的注册用户,而且您已经成功的登录才可以发表,如果您尚未登录,请您点击此处登录,如果您尚未注册,请您点击此处注册,在您登录/注册完成后系统会自动的带您回到本页面;
  2、您所发表的内容权代表您的个人意见,与 LinuxAid 的立场无关,必要时您必须为您所发表的内容负全部责任;
  3、您所发表的内容不允许包含色情、非法或者危害国家安全的言论,否则将依法追究现任;

  在您填写意见相应内容时,请您注意以下问题:
  1、主题最大长度为 120 字节,只允许使用除了“"”、“'”之外的中英文字符;
  2、内容最大长度为 250 字节,可以包含任何字符。



总人数: 1 平均分数: ★★★★★

主题 发表人
感触颇深 ideal









查看更多评论==> 
 ==>请您发表意见<==
您的评分 1 2 3 4 5
主  题
内  容 最长250字节






--------------------------------------------------------------------------------

〖授权声明〗〖关于我们〗〖技术成员〗〖合作机会〗〖联系方法〗〖意见反馈〗
© 2000 LinuxAid
京ICP备010217号

[关闭][返回]