本文发表在 rolia.net 枫下论坛再说我们的CPU——胡伟武
没想到《我们的CPU》在网友中引起了一些讨论。我写这篇文章的本意之一是怕一些新闻机构报道时说得不够准确而挨同学或网友的骂,自己把这个事情说清楚挨的骂会少一点。现在看来,这个目标至少部分地达到了。但我没有想到大家对我们自己的CPU如此热心,使我觉得我们不是在孤军奋战,增加了信心。我对网友意见的重视不亚于对鉴定委员会意见的重视,专门让一些学生收集这些意见并进行分类,并在组内告戒对于网友的意见,“有则改之,无则加勉”。因为好多网友是真正在第一线工作的人,是真正把握国际前沿的人。鉴定委员会的意见也很重要,一者他们都是国内专家,二者没有他们的支持,我们都会饿死。这就好比我们写文章得有人审稿一样。
我说过,我们现在做的工作不多,实在不值得写太多的东西来宣传或挨骂后进行解释。但从网友的讨论中,我得到很多启发(很多网友提了很多很好的建议),我想到可以利用网友的智慧一起来推动这个事情。
不管对我们的工作支持的也好,反对的也好,有两点是一致的。一是对我们自己的CPU非常关心,二是对中国科技界目前的浮躁现象深恶痛绝(这其实很难怪科技工作者,这是从上到下全国的风气)。
对于那些对我们的工作加以鼓励的人,我要深深地感谢。看得出来,有不少是行家,功底很深厚。我们一定会继续努力,争取早日投片成功。有些网友提了很好的建议(包括不少技术上的建议),我们会用在我们下一步的工作中。有些网友表示,只要我们投片成功,达到PII的水平,他们愿意用PIV的价钱来买我们机器。对他们除了感谢外还有致敬,我把他们看作我们的朋友。并请他们不要食言,因为我是玩真的。
有一位网友提了很好的建议,让我们开放我们的设计,这个主意很好。只要所里不反对,我肯定开放源代码,至少是C模拟器的源代码,请大家一起帮我们做设计。当然,开放之前,还要加一些东西,因为我写程序没有注解。
有不少网友提到这个和美国研究生的“大作业”有什么区别。这个区别是很大的。想一想,有没有美国的高校把一个双精度、全流水、符合IEEE 754标准的浮点运算部件作为一个“大作业”让学生做,而这只是我们十几个模块中的一个模块(当然是较大的一个)。顺便提一下,我们的浮点运算部件用的算法比较新,是九十年代末提出的。我可以给大家提供一个C程序,用这个程序在PIV的机器上能测出它不符合IEEE 754的地方(这究竟是处理器的问题还是程序或者编译的问题也欢迎行家分析),而在我们的机器上测不出来。另外,说到大作业,我们现在也正准备开一些这方面的课,让我们的博士生做一些大作业,其中一项就是做一个实现MIPS I的指令系统的CPU,或者写一个完整的嵌入式操作系统。其实我在文章中提到我在科大本科论文做8086就是想传递这样一个信息,做CPU设计并不难,本科生就能做,难的是要做好。如果真的是一个大作业,用得着我领着几十个人干吗?至少我的科大8611的同学和以前对我做的软件DSM系统JIAJIA有所了解的同行知道我不是白痴。我的课题组中高手很多,不少是能独当一面的,其中有对Linux内核非常熟悉的,也有工程经验非常丰富的。
关于媒体的报道中关于我们CPU的评价,不管别人怎么说,自己觉得在通用CPU设计方面处于国内领先,和在动态流水线设计上达到国际先进水平还是比较确切的。如果我已经做了多发射和对CACHE作了改进,我还敢说在通用处理器设计方面达到国际先进水平。在动态流水线方面(针对我们的结构)可以说已经接近一个极至,很难再有很大的提高。动态流水线的核心是要解决各种相关,如数据相关、控制相关、例外相关等。做到后来,我们的结构有点象数据驱动或事件驱动,即译码或发射时只是在指令中建立互相的相关关系,并不解决相关,指令到达最后关头才等待(再多走一拍就会出错了)所需的数据或事件,一旦该指令所等待的数据或条件准备好,马上继续前进。至于其中的创新,结构上的大创新是没有的,但具体实现上的一些技巧还是有的,有几点我自己非常得意。记得Henessy(还是Patterson?)曾经说过,把90年以后所有关于Architecture方面的文章都烧掉,对Architecture的研究没有任何损失。其实,如果大家仔细分析分析一些通用CPU的结构,如Alpha, MIPS, PowerPC, PIV等,发现确实是大同小异,取舍不同而已。我这样说是因为我们最近已经对这些处理器的结构做了较详细的分析和比较。
有些网友对我们的设计在技术上提出了不少建议,尤其是关于CACHE的重要性。关于CACHE,我们是非常重视的,因为我在做DSM时用过除了Alpha工作站以外的几乎所有厂家的计算机,对CACHE对性能的影响是有深刻体会的。在我们投片时容量肯定会增加,组织方式也许会做到二路组相联。不过,CACHE设计是很复杂的,尤其是做non-blocking的CACHE设计更复杂,我们现在最关键的是要投片成功,所以为了保持控制简单我们在CACHE方面不会太aggressive,好多优化方法可能在目前的阶段不会用。例如,为了做2路组相联,连线会增加很多,而在深亚微米的工艺中连线复杂性和延迟是最主要的。我们目前关于CACHE的预研正在进行,也有一些新的想法。关于多发射,我想以后做到双发射就行了,因为RISC结构现在越来越复杂,做到4发射已经有点违背RISC提出时的初衷。为了提高性能,超流水、多线程、片内SMP等技术倒是我较看好的,上次我提到过,希望做几十个CPU的大SMP结点。当然有好多关键技术没有解决。我对Deleware大学高光荣教授的EARTH技术比较感兴趣(这几天高老师正好在计算所跟我们交流)。自己作了这么多年并行处理,希望以后用户不用并行编程就能用并行机。如果大家觉得上述技术思路有问题,欢迎大家讨论,因为这种决策对于我们是至关重要的。
至于有些人担心我们自己虽然能做设计但生产不了。我想说的是中国目前最缺的是设计,国内最近化了很多钱组建了或正在建不少生产线,0.35, 0.25, 0.18的都有,关键是没东西可以生产。的确,以前是由于生产不了而导致设计队伍垮掉,但现在不同了。此外,ASIC设计很见工夫,象Alpha 21264在0.35的工艺上能做到600多MHz的主频,我看我们最多能做到200MHz就很不错了,这些东西的确是需要积累的。
对于有些觉得凡是中国人做的事情就“shit”, 觉得自己的同胞肯定不如洋人,或没有仔细读我的文章就恶意攻击并以此为乐的人,用先人的两句诗奉送:“汉人学得胡儿语,便向墙头骂汉人”。但如果他们能够做到如下两件事情之一,我愿意在我们够得到的所有BBS上向他们道歉,并承担一切费用请他们回来向他们请教。第一件是在两个月之内单独完成一个单双精度、全流水、符合IEEE 754标准的浮点部件的逻辑设计,要求完成除了除法、开方以外的MIPS III指令系统的所有浮点运算。第二件是在我们的处理器中有四条MIPS的地址不对齐的访存指令(LWL,LWR,SWL,SWR)没有实现,处理器碰到它们时产生一个保留指令例外并由操作系统软件模拟,要求一周之内修改LINUX内核完成这一功能。第二件事情做起来并不难,但得知道修改LINUX的什么部分,以及当模拟的指令是转移指令的延迟槽指令时的特殊处理,还要保证核心态发生的保留指令例外处理不影响系统的稳定,此外,由于例外处理是在核心态,要注意别留下安全隐患,使非法用户有机可乘。如果把我们的GodSon比喻成在美国的一个学期的大作业,那么上面的两件事应该在一个星期之内完成。
我已经说过,我们只是作了很少的一些事情,至少比起计算所的先辈们的工作是很微不足道的。以后的工作确实很艰巨,但路得一步一步地走。在最近计算所表彰我们时我说要把它看成鞭策,继续努力,死而后已。下面有人在笑,觉得我说得太严重,但我自己知道如果要在很短的时间内做好这个事情,累死也是不奇怪的,至少有人得折寿,毕竟我们差距太大了。但我们有一支高素质而玩命的队伍,我把这支队伍比喻成敢死队。队伍中很多人是能独当一面的,但我们走到一起来了,因为大家都知道只有摈弃个人得失,团结一致,才能做大事情,都希望5000年的中国有自己的CPU。
最后,也是我写这篇文章的重要目的,欢迎高手加盟我们组,一起把这件事做好。如果你是在国内,我想说,立足国内比在国外机会更多,更会有成就感。如果你在国外,我想说,粱园虽好,非久居之地。虽然我没有长时间在国外呆过,但对地球那边的情况还是了解的。我的抽屉里还放着两张公费出国访问的任务书(其中有一张已经过期作废了),国外也有人请我去,但我觉得在国内为自己的国家做事情更有意思。如果你曾经对计算所有所了解,我想告诉你,现在的计算所已经不是两年前的计算所。李国杰当所长后,已经把计算所变成集中力量做大事的计算所,而不是原来一盘散沙的计算所,至少在我眼中,已经不会象原来那样把一、两百万的项目当大项目了。我看如果老李再当一届所长,计算所复兴是没问题的,成为国际一流的研究所是有戏的。计算所的待遇也不错,“让计算所的员工在中关村地区过得比较体面”是老李在计算所员工大会上的承诺,我觉得至少出门打车不用计较是1.6还是1.2元的出租车了。从我们这里出去的一些学生也说我们现在的科研条件比他们还好。从国外回来交流的一些老师也觉得我们不管从所做的工作,还是经费、队伍及科研条件都不比国外差。
再一次诚邀高手加盟,但以下三种人除外。一是上述“汉人学得胡儿语,便向墙头骂汉人”的人,或挟洋自重,希望因为自己是洋学位得到比别人更多的人;二是为了写文章而做学问,夸夸其谈可以,动起手来不行的人;三是过于计较个人得失,动不动就想把队伍拉出去自己干,忙着讨论谁占多少股的人。
同时,我们也请大家对我们的工作提出意见和建议,尤其是在以下两方面。一是在技术路线和技术设计上,我们会尽量公开我们的设计。有人说我不懂体系结构,这个人是高手,至少对体系结构方面学术界近几年在做什么事情我是不了解的。我原来做DSM,对这方面国际上的研究状况倒是门清。二是关于我们未来的发展思路,尤其是如何尽快找到市场切入点。
这篇文章写完后,即使被骂得狗血喷头,我也不会再辩解了。各位看到我的下一篇文章时,应是我们投片成功的时候。更多精彩文章及讨论,请光临枫下论坛 rolia.net
没想到《我们的CPU》在网友中引起了一些讨论。我写这篇文章的本意之一是怕一些新闻机构报道时说得不够准确而挨同学或网友的骂,自己把这个事情说清楚挨的骂会少一点。现在看来,这个目标至少部分地达到了。但我没有想到大家对我们自己的CPU如此热心,使我觉得我们不是在孤军奋战,增加了信心。我对网友意见的重视不亚于对鉴定委员会意见的重视,专门让一些学生收集这些意见并进行分类,并在组内告戒对于网友的意见,“有则改之,无则加勉”。因为好多网友是真正在第一线工作的人,是真正把握国际前沿的人。鉴定委员会的意见也很重要,一者他们都是国内专家,二者没有他们的支持,我们都会饿死。这就好比我们写文章得有人审稿一样。
我说过,我们现在做的工作不多,实在不值得写太多的东西来宣传或挨骂后进行解释。但从网友的讨论中,我得到很多启发(很多网友提了很多很好的建议),我想到可以利用网友的智慧一起来推动这个事情。
不管对我们的工作支持的也好,反对的也好,有两点是一致的。一是对我们自己的CPU非常关心,二是对中国科技界目前的浮躁现象深恶痛绝(这其实很难怪科技工作者,这是从上到下全国的风气)。
对于那些对我们的工作加以鼓励的人,我要深深地感谢。看得出来,有不少是行家,功底很深厚。我们一定会继续努力,争取早日投片成功。有些网友提了很好的建议(包括不少技术上的建议),我们会用在我们下一步的工作中。有些网友表示,只要我们投片成功,达到PII的水平,他们愿意用PIV的价钱来买我们机器。对他们除了感谢外还有致敬,我把他们看作我们的朋友。并请他们不要食言,因为我是玩真的。
有一位网友提了很好的建议,让我们开放我们的设计,这个主意很好。只要所里不反对,我肯定开放源代码,至少是C模拟器的源代码,请大家一起帮我们做设计。当然,开放之前,还要加一些东西,因为我写程序没有注解。
有不少网友提到这个和美国研究生的“大作业”有什么区别。这个区别是很大的。想一想,有没有美国的高校把一个双精度、全流水、符合IEEE 754标准的浮点运算部件作为一个“大作业”让学生做,而这只是我们十几个模块中的一个模块(当然是较大的一个)。顺便提一下,我们的浮点运算部件用的算法比较新,是九十年代末提出的。我可以给大家提供一个C程序,用这个程序在PIV的机器上能测出它不符合IEEE 754的地方(这究竟是处理器的问题还是程序或者编译的问题也欢迎行家分析),而在我们的机器上测不出来。另外,说到大作业,我们现在也正准备开一些这方面的课,让我们的博士生做一些大作业,其中一项就是做一个实现MIPS I的指令系统的CPU,或者写一个完整的嵌入式操作系统。其实我在文章中提到我在科大本科论文做8086就是想传递这样一个信息,做CPU设计并不难,本科生就能做,难的是要做好。如果真的是一个大作业,用得着我领着几十个人干吗?至少我的科大8611的同学和以前对我做的软件DSM系统JIAJIA有所了解的同行知道我不是白痴。我的课题组中高手很多,不少是能独当一面的,其中有对Linux内核非常熟悉的,也有工程经验非常丰富的。
关于媒体的报道中关于我们CPU的评价,不管别人怎么说,自己觉得在通用CPU设计方面处于国内领先,和在动态流水线设计上达到国际先进水平还是比较确切的。如果我已经做了多发射和对CACHE作了改进,我还敢说在通用处理器设计方面达到国际先进水平。在动态流水线方面(针对我们的结构)可以说已经接近一个极至,很难再有很大的提高。动态流水线的核心是要解决各种相关,如数据相关、控制相关、例外相关等。做到后来,我们的结构有点象数据驱动或事件驱动,即译码或发射时只是在指令中建立互相的相关关系,并不解决相关,指令到达最后关头才等待(再多走一拍就会出错了)所需的数据或事件,一旦该指令所等待的数据或条件准备好,马上继续前进。至于其中的创新,结构上的大创新是没有的,但具体实现上的一些技巧还是有的,有几点我自己非常得意。记得Henessy(还是Patterson?)曾经说过,把90年以后所有关于Architecture方面的文章都烧掉,对Architecture的研究没有任何损失。其实,如果大家仔细分析分析一些通用CPU的结构,如Alpha, MIPS, PowerPC, PIV等,发现确实是大同小异,取舍不同而已。我这样说是因为我们最近已经对这些处理器的结构做了较详细的分析和比较。
有些网友对我们的设计在技术上提出了不少建议,尤其是关于CACHE的重要性。关于CACHE,我们是非常重视的,因为我在做DSM时用过除了Alpha工作站以外的几乎所有厂家的计算机,对CACHE对性能的影响是有深刻体会的。在我们投片时容量肯定会增加,组织方式也许会做到二路组相联。不过,CACHE设计是很复杂的,尤其是做non-blocking的CACHE设计更复杂,我们现在最关键的是要投片成功,所以为了保持控制简单我们在CACHE方面不会太aggressive,好多优化方法可能在目前的阶段不会用。例如,为了做2路组相联,连线会增加很多,而在深亚微米的工艺中连线复杂性和延迟是最主要的。我们目前关于CACHE的预研正在进行,也有一些新的想法。关于多发射,我想以后做到双发射就行了,因为RISC结构现在越来越复杂,做到4发射已经有点违背RISC提出时的初衷。为了提高性能,超流水、多线程、片内SMP等技术倒是我较看好的,上次我提到过,希望做几十个CPU的大SMP结点。当然有好多关键技术没有解决。我对Deleware大学高光荣教授的EARTH技术比较感兴趣(这几天高老师正好在计算所跟我们交流)。自己作了这么多年并行处理,希望以后用户不用并行编程就能用并行机。如果大家觉得上述技术思路有问题,欢迎大家讨论,因为这种决策对于我们是至关重要的。
至于有些人担心我们自己虽然能做设计但生产不了。我想说的是中国目前最缺的是设计,国内最近化了很多钱组建了或正在建不少生产线,0.35, 0.25, 0.18的都有,关键是没东西可以生产。的确,以前是由于生产不了而导致设计队伍垮掉,但现在不同了。此外,ASIC设计很见工夫,象Alpha 21264在0.35的工艺上能做到600多MHz的主频,我看我们最多能做到200MHz就很不错了,这些东西的确是需要积累的。
对于有些觉得凡是中国人做的事情就“shit”, 觉得自己的同胞肯定不如洋人,或没有仔细读我的文章就恶意攻击并以此为乐的人,用先人的两句诗奉送:“汉人学得胡儿语,便向墙头骂汉人”。但如果他们能够做到如下两件事情之一,我愿意在我们够得到的所有BBS上向他们道歉,并承担一切费用请他们回来向他们请教。第一件是在两个月之内单独完成一个单双精度、全流水、符合IEEE 754标准的浮点部件的逻辑设计,要求完成除了除法、开方以外的MIPS III指令系统的所有浮点运算。第二件是在我们的处理器中有四条MIPS的地址不对齐的访存指令(LWL,LWR,SWL,SWR)没有实现,处理器碰到它们时产生一个保留指令例外并由操作系统软件模拟,要求一周之内修改LINUX内核完成这一功能。第二件事情做起来并不难,但得知道修改LINUX的什么部分,以及当模拟的指令是转移指令的延迟槽指令时的特殊处理,还要保证核心态发生的保留指令例外处理不影响系统的稳定,此外,由于例外处理是在核心态,要注意别留下安全隐患,使非法用户有机可乘。如果把我们的GodSon比喻成在美国的一个学期的大作业,那么上面的两件事应该在一个星期之内完成。
我已经说过,我们只是作了很少的一些事情,至少比起计算所的先辈们的工作是很微不足道的。以后的工作确实很艰巨,但路得一步一步地走。在最近计算所表彰我们时我说要把它看成鞭策,继续努力,死而后已。下面有人在笑,觉得我说得太严重,但我自己知道如果要在很短的时间内做好这个事情,累死也是不奇怪的,至少有人得折寿,毕竟我们差距太大了。但我们有一支高素质而玩命的队伍,我把这支队伍比喻成敢死队。队伍中很多人是能独当一面的,但我们走到一起来了,因为大家都知道只有摈弃个人得失,团结一致,才能做大事情,都希望5000年的中国有自己的CPU。
最后,也是我写这篇文章的重要目的,欢迎高手加盟我们组,一起把这件事做好。如果你是在国内,我想说,立足国内比在国外机会更多,更会有成就感。如果你在国外,我想说,粱园虽好,非久居之地。虽然我没有长时间在国外呆过,但对地球那边的情况还是了解的。我的抽屉里还放着两张公费出国访问的任务书(其中有一张已经过期作废了),国外也有人请我去,但我觉得在国内为自己的国家做事情更有意思。如果你曾经对计算所有所了解,我想告诉你,现在的计算所已经不是两年前的计算所。李国杰当所长后,已经把计算所变成集中力量做大事的计算所,而不是原来一盘散沙的计算所,至少在我眼中,已经不会象原来那样把一、两百万的项目当大项目了。我看如果老李再当一届所长,计算所复兴是没问题的,成为国际一流的研究所是有戏的。计算所的待遇也不错,“让计算所的员工在中关村地区过得比较体面”是老李在计算所员工大会上的承诺,我觉得至少出门打车不用计较是1.6还是1.2元的出租车了。从我们这里出去的一些学生也说我们现在的科研条件比他们还好。从国外回来交流的一些老师也觉得我们不管从所做的工作,还是经费、队伍及科研条件都不比国外差。
再一次诚邀高手加盟,但以下三种人除外。一是上述“汉人学得胡儿语,便向墙头骂汉人”的人,或挟洋自重,希望因为自己是洋学位得到比别人更多的人;二是为了写文章而做学问,夸夸其谈可以,动起手来不行的人;三是过于计较个人得失,动不动就想把队伍拉出去自己干,忙着讨论谁占多少股的人。
同时,我们也请大家对我们的工作提出意见和建议,尤其是在以下两方面。一是在技术路线和技术设计上,我们会尽量公开我们的设计。有人说我不懂体系结构,这个人是高手,至少对体系结构方面学术界近几年在做什么事情我是不了解的。我原来做DSM,对这方面国际上的研究状况倒是门清。二是关于我们未来的发展思路,尤其是如何尽快找到市场切入点。
这篇文章写完后,即使被骂得狗血喷头,我也不会再辩解了。各位看到我的下一篇文章时,应是我们投片成功的时候。更多精彩文章及讨论,请光临枫下论坛 rolia.net