pm001 2008-6-25 00:24
此文章泄露了龙芯2 软件模拟运行X86程序的效率!
缘深“BT”组
作者:武成岗
我跟“BT”组结缘其实比较偶然,读博期间攻研方向是人工智能,毕业时和张兆庆老师在楼梯上巧遇,使得我很幸运地加入到系统结构室这个团队,开始从事编译方面的研究。搞编译对我来讲完全是半路出家,付出了很多努力才走上正轨,我个人喜欢有挑战性的工作,在编译这个比较偏基础理论的工作中,几年下来感觉收获颇丰。
“BT”由来
说来好笑,这几年我一直投身于一个叫做“BT”的课题组中,从事二进制翻译(Binary Translation)方面的研究。起初为了简化称呼,将该组命名为“BT”组,谁知大家都叫我们“变态”组,上网一查,“BT”竟是“变态”的缩写!于是开始研究新的名字,汇聚众人智慧后改名DigitalBridge(数字桥)Translation组,简称“DBT”,结果又得了一个“大变态”的名字!看来总是脱离不了“BT”了,于是只好接受。后来我们觉得“BT”也挺好,到如今简直就以“BT”为荣了!因为在“BT”组里,发生着很多有趣的故事。
小姐让贤
二进制翻译是研究如何通过软件手段进行代码移植的技术。成立“BT”组,一个重要的目的是希望为“龙芯”做些贡献,将X86处理器上的应用软件移植到“龙芯”上,丰富“龙芯”的应用。故而选择了以X86为源、MIPS为目标作为研究对象。
项目组最初只有三名成员:马湘宁、唐峰和熊竞,后来因工作关系小熊走了,就只剩两个人艰难前行。当时由在读博士生马湘宁牵头,通过改造Queensland大学的UQBT,实现了一个X86到MIPS的纯静态翻译系统。虽然该系统只能通过三四个简单程序的测试,但为后来工作的开展做了知识上的储备。纯静态的方案具有天生的缺陷,无法解决众多代码中存在的间接跳转、间接调用等问题,于是他们给出了“静态方案不可行”的结论,一时间项目陷于停顿状态,大家开始寻求别的出路。
2003年3月初我加入了“BT”组,经过一段时间的学习,慢慢掌握了该方向的基础知识,并提出一些有价值的建议。这时马小姐做出一个惊人之举,表示希望由我来接管这个小组,她甘愿作项目组的普通一员!记得当时实验室有规定——在读学生担当课题组长会有额外的补助,但她考虑更多的是项目的发展,多次提出让贤。尽管我再三推辞,她还是十分坚决。大家都开玩笑说她已经具备“BT”潜质了。最后在室领导冯晓兵的协调下,还是由我接管了“BT”组,马湘宁则如她所说,认真地配合我开展工作。而后,随着工作的逐步深入,大家渐渐把拿出设计方案的期望寄托到我的身上,我也正式开始了“BT”历程……
争执不休
经过一番深入细致的调研和初步试验,项目逐渐开始进入方案论证阶段。“BT”组此时又迎来了两个新成员──白童心和谢海斌。起初意见很不统一,大家各自提出自己的想法,同时有几套不成熟的方案摆在桌面上。于是每天都在争论,每人都在陈述、辩解、维护自己的观点,除了开会,不管是吃饭、走路,只要见面就一定是在争辩。
我设计了一套纯动态的方案,提交给小组讨论,同样没有摆脱被驳斥的命运。我耐心向他们解释其中合理的部分,汇总大家提出的建议,回来再进行认真的修改。争论应该说是有益的,反复的争论和反复的修改使得该方案愈来愈合理化。渐渐地大家开始认可这一方案,配合我进行探索。“怎样让系统运转?”“如何加入翻译和优化?”“如何进行动态信息收集?”讨论非常热烈,共识也越来越多,原本较粗的方案也越来越丰满,我们感觉就像“滚雪球”一样,从模糊一片的雪花聚集起来,逐渐滚成了雪球,越来越大,然后又组成有模有样的雪人。
非典时期
总体方案明确后,大家都很高兴,从中看到了一线曙光。正准备铺开摊子大干一番的时候,却遇上了2003年5月突如其来的非典。当时几乎所有人都在关注非典的消息,发现它离我们越来越近,先是三元桥发现病例,然后白石桥、中关村……直到近在咫尺的物理所。这时“BT”组弟兄们还是一心想验证得之不易的方案,全力去设计和编码,工作气氛非常热烈。后来板蓝根、口罩等开始流行和脱销了,人们日渐忙乱恐慌,各单位也展开了相对隔离的措施。那时,研一的谢海斌被限制在玉泉路的研究生院里,大家只好通过E-mail来传递思想、讨论方案。库函数处理是系统中的一个重要环节,先是由我设计了一个方案,主要交给谢来完成。没想到在四周充斥着对非典恐慌的环境中,他一个人还能主动工作,不但实现了相应的功能,而且还做出较大的改进。后来我们在所里进行联调,发现他从网上传过来的代码根本不需要任何修改就能很好地工作。当第一个小测试程序hanoi在唐峰手里通过时,大家都异常高兴,立即发邮件告诉谢海斌,于是在网上使劲庆祝了一番!真的像孩子一样高兴!经过这番努力,我们的动态方案得以验证,当初的争执也就此尘埃落定。
后来通过的测试用例越来越多,达到了两千多个,就此士气高涨。我们不断地将方案中设计的翻译、优化、连接、trace处理等一系列功能加入其中,性能也在日益提高……
初上展台
最初调试完成的版本被我们命名为“DBT-I”。记得那时是2003年11月,正逢计算所“开放日”,“DBT-I”被推荐去展示,得到这个消息的我们都很兴奋。
北京的初冬,“开放日”定在东三环的长城饭店。由于先前有其它单位的展览,我们只被允许半夜进驻。头一天傍晚唐峰和谢海斌就在那里待命,等到深夜12点才能开始会场布置和演示系统的调试,一直忙到凌晨3、4点,一夜没有休息。第二天一早我去讲解,安排他俩回去休息,但他们怎么也不肯,又在那里坚持了一个整天。
那天真是印象深刻!很多人对我们的展位感兴趣,不断有人过来询问和讨论,课题组的成员都非常兴奋。呵呵,小小的“BT”组居然受到了认可,引起了关注!所领导看完演示,也对我们的课题产生了信心!“BT”组也开始梦想着,如果再进一步提高些性能,就更接近为“龙芯”服务的目标了。
回来后,陆陆续续有人在技术发展部的引导下来我们组里参观。后来有一天,一个军队单位来参观时,找我们咨询了很多,又跟实验室领导谈了很久,然后就提出合作意向,一举投资400万,请我们为其完成一个专用系统。我们准备将这个新的系统命名为“DBT-II”。
快乐“BT”
到2004年下半年,马湘和小白毕业走了,组里又不断有新生力量加盟,自从吸引来投资,我们的底气也足了许多。重新开始进行第二轮方案探讨和论证,我提出了动静结合方案,于是搞不搞动静结合?动静如何结合?一系列问题又摆上桌面,开始进行紧张的设计和论证。我们准备在原有的纯动态基础上进行诸多的优化改造,新的方案几经周折,终于定稿,基本上还是由我总体负责,兵分两路进行攻研──动态的改造由唐峰、杨浩、贾耀仓、李晶完成;静态部分则交给了崔慧敏、谢海斌和陈龙。
想在原有的系统上进行提高,不是一件很容易的事情。新的任务布置下去,几乎马上就遇到了难题,经常是在大家进展不下去时,我就给大家打气,拿出“BT”组的作风来鼓励他们。也许因为项目组名字的缘故,我们组的成员的确是比较“BT”,不信你来瞧瞧:
崔慧敏,79年的河北好姑娘,2004年2月从清华毕业。按照所里规定的,新员工报到时间是4月份,但她毕业的同时就来项目组工作了。当时她正值新婚,却没有休息一天。她细致严谨,有一股极强的韧劲。想将DBT和ORC的后端衔接,需要从数万行代码中找出可用的部分,并进行改造,使之和DBT无缝结合,应该说是一项极为枯燥且具有挑战性的任务,她毫不犹豫地承担了下来,经过数月的摸索和无数次的尝试,终于圆满地完成了任务。值得一提的还有他的老公,活泼风趣,爱吃六两米饭,经常与大家一起Happy,不分你我,并且对她的工作十分支持。
唐峰,79年的上海帅哥,浓眉大眼,外形酷似小号的姚明,有人说:“拿着放大镜瞧唐锋,就不用半夜起来看NBA了。”他思维敏捷、动作迅速,是工作中的一把好手,通常能够在短时间里解决大问题。大家总是看到他周末的时候坚守在自己的工位上,谁知照样能够让温柔的女朋友对他毫无怨言,其魅力可见一斑。
谢海斌,80年的湖南才子,头脑和身手都很灵活,动手能力很强。刚认识的人可能会觉得他内向腼腆,其实一肚子内秀,而且很有主见,喜欢向困难挑战,往往能够一针见血地摆平让众人挠头的难题。
杨浩,80年的东北猛男,一表人才的篮球健将,还有个超级pp的mm。他接触工作时肯下力气,手脚勤快,能提出一些意想不到的好idea,而且善于调节组内气氛,主动以阿Q精神来鼓舞大家的士气。
贾耀仓,80年的陕西汉子,人称“贾帅”。他原是其他门派的,虽是半路出家,但内功深厚,入门不久便掌握了本门“BT”武功的精髓,成为一员干将。
陈龙,81年的山东好汉,眉目清秀,粗中有细,接受能力强,且干劲十足。开会讨论时他虽不是第一个发言的,但是保证心中有数,思维清晰,能一语中的。
李晶,82年的河南美女,聪明伶俐,思维活跃,心胸宽广。自学能力强,任何问题入了她手,总能给你挖个究竟。虽入门时间不久,但可谓屡建奇功。
“BT”组成员的一大特点就是从不气馁。虽然研究BT枯燥乏味,任务量繁重,需要重复地调试再调试,但是遇到挫折时大家总能找些轻松的话题来自我调侃,调节气氛,互相鼓励,开拓思路。即使遇到再大的难关,最后也总会在我们的欢声笑语中迎刃而解。
“BT”组的另一大特点就是团结、心齐,劲儿往一处使。每次工作讨论时都能够畅所欲言,即使不是自己的问题,也会主动思考,广集思路,给出有益的看法和建议。
孕育新生
2005年春节前,学生们都放假了,只有小崔和我是员工,还有两周时间工作,我们俩就静下心来继续调试。当时有个多进程程序出了bug,这个bug又恰巧出在子进程中,我们唯一的调试工具gdb只能对主进程进行跟踪。小崔找我让我想个办法,我提议在子进程中添加一些输出信息以帮助调试。为了区分各个子进程,需要为它们“起名字”,当时我老婆正在怀孕,我就随手起了个“wucg_son”,后来就继续“wucg_son1”,“wucg_son2”……。于是每次调试到这些进程的时候,小崔就说:“看你又把你儿子给搬出来了……”。后来我们在艰苦的两周里终于把剩下的程序全部调过了,“DBT-II”初具雏形。小崔就高兴地说:“武哥,看来你儿子还真挺争气!”
谁知后来我老婆生出了个女儿,大家都特别高兴,专门给我筹集了一批纸尿裤。女儿庆祝满月的时候恰逢周末,“BT”组的一帮人在我家狂饮一番雪碧,痛痛快快地玩了一下午“杀人”游戏……
开卷有益
从2005年10月开始,在我的提议下“BT”组开始“讨论班”活动,大家分头阅读本领域的经典文章,融会贯通后将内容整理成ppt,每周抽出一个晚上进行交流。“BT”讨论班的规则是“没有很愚蠢的问题,只有讲不懂的老师”。基于这一规则,没充分准备好的人是不开讲的,哪怕向后推迟。通常从开始介绍论文背景,就不断有人提问题,小到ppt里的一个不认识的字,大到某个难以理解的算法,什么问题都可以提出来,讨论解决,整个讲解过程中穿插着热烈的讨论。这样一来,大家都在学习中有所收获,对学术论文的研究也很透撤。讨论班中涌现出一些“铁嘴”,特别是李晶,她能化繁为简,深入浅出,听她的讲解可以说是一种享受。
走近龙芯
一路走来,现阶段“DBT”系统正处于性能提升阶段,我们在对翻译器作精雕细刻,运行效率也不断提高。当前的系统在没有硬件支持的情况下,基本上能达到“龙芯”本地代码峰值的35-40%。“BT”组从早期的“小打小闹”,到现在已经发展为一支勇于挑战自我、有能力实现大系统的科研力量。
今年正是计算所建所50周年之际,“龙芯3”多核处理器研发工作正式启动,该系统拟采用多核与虚拟机相结合的方案。我们有幸被所领导和龙芯负责人选中承担其中的一部分与虚拟机相关的任务,“BT”组的弟兄们得到消息后都很兴奋。
给我们“BT”人做个小结,那就是不拘泥于陈规,敢于挑战,思维活跃,和谐融洽,快乐团结。感受着“BT一家人”由小到大发展的过程,让我有了这些由衷的快乐感慨,有照片为证!
xy776 2008-6-25 00:50
说了半天看来N久
貌似现在龙芯2运行的速度还是不怎么样啊
OsirisGeb 2008-6-26 19:15
*** 作者被禁止或删除 内容自动屏蔽 ***
Hellfirer 2008-6-26 19:27
达到“龙芯”本地代码峰值的35-40%,本身性能就很平庸了,再减去60-65%,基本上只能扫雷
aswolf 2008-6-26 21:56
干嘛要跑X86啊,那明显水土不服嘛。不然让X86跑龙芯看看?
cccbbccc 2008-6-26 22:39
楼主的转载还是比较有技术含量的,在龙芯的论坛里谈得比较深入。
[url]http://www.lemote.com/bbs/viewthread.php?tid=15928&extra=page%3D1&page=1[/url]
这种软件翻译的方式值不值得做还是有待商榷的