标签归档:JIT
webkit-龙小组成立
自从龙芯N32系统上的Squirrelfish性能发布后,得到了很多朋友的支持,汇报最新进展: webkit-龙移植优化小组成立,dancefish和philip兄加入。dancefish兄对webkit在嵌入式系统上的移植和裁剪经验丰富,philip兄对webkit在andorid系统下的编译调试也有丰富经验。几番邮件交流之后,根据个人的兴趣爱好和实际工作,大致分了一下,dancefish和philip侧重webkit中的webcore部分,以及浏览器的验证。我将侧重JavaScript部分的JIT。这个分工只是大致而已。大家都是凭自己的热心兴趣在做。
龙芯N32系统上的Squirrelfish性能
缘起:写这篇文章因为报名参加了龙芯开源软件大赛,项目是《Webkit-龙》,把webkit移植到龙芯N32系统上,起初是想做chromium的移植。但在起步的过程中,发现一是Google的V8引擎,对mips的支持基本处于不可用状态,而且chromium为了追求性能,使用的方式太过灵巧,如Native client(Google的野心–Native Client+LLVM),凭自己的一己之力,靠业余时间,很难完成,只好先做webkit了。 Squirrelfish 是Webkit的Javascript引擎。针对龙芯平台(MIPS)已经有了JIT支持,但仅仅对O32系统才有,本博曾经介绍过相关内容(WebKit和Firefox的JavaScript性能对比)。
Google的野心–Native Client+LLVM
认识Native Client Native Client (Nacl) 是Google提出的一种让浏览器直接运行机器码的技术,让Web应用可以从客户机上获得更多的性能,同时又不会引起安全问题。这个技术类似于微软的ActiveX。程序员可以使用C++或者其他语言编写web应用程序,再通过Nacl发布。程序中可以调用一些系统服务中安全的API,如声卡或者图形显示等。Nacl能使用的本地系统调用都是已经规定好的,所以安全性有保证。这篇文章介绍如何使用Native Client。
前瞻-LLVM大事记(2004-2010)
因为之前的两篇博文前瞻-全时优化和LLVM-1和前瞻-全时优化和LLVM-2都是基于Chris Lattner 2004年发表在CGO的文章写的。所以需要介绍一下LLVM从2004到2010这六年的变化,LLVM的开发社区很活跃。 从2004年三月到2010年4月,LLVM共发布了1.2-1.9,2.0-2.7,16个版本,至少每年发布两个版本。详细的历史发布版本和release都能从这里找到。
前瞻-全时优化和LLVM-2
上篇文章,以论文为主要依据,介绍了LLVM的概况和中间表示,本篇关注论文的后半部分内容–架构设计和LLVM的整体评测: LLVM的架构设计: 总览 LLVM的架构设计以让传统的链接时,安装时,运行时和空闲时代码转换都能透明地在LLVM中间表示上展开为目的。上图就是LLVM的高层设计架构。包括静态的编译器前端用于生成LLVM中间表示;连接器用于做连接时优化,尤其是过程间优化。连接器的输出被JIT或者机器代码生成器生成机器代码。在机器代码生成时,可以通过插入低代价的抽样指令来测量运行时的profile,检测热代码,并将空闲时进行优化。
前瞻-全时优化和LLVM-1
读论文<LLVM: A Compilation Framework for Lifelong Program Analysis & Transformation> CGO 04 1,写在前面的话 全时优化(LifeLong Optimization)对于每个编译爱好者来说,太有魅力了。我在起初也是被这个题目所吸引打算一探究竟。本文是04年LLVM的最早两位开发者Chris Lattner和Vikram Adve所写,发表在04年的CGO上, 先来说说LLVM的历史。2000年LLVM开始开发,2005年Apple雇了Chris Lattner,LLVM也相当于成了Apple的官方支持的编译器。Apple已经将它用在OpenCL的流水线优化,Xcode已经能使用llvm-gcc编译代码。可以说05年之前LLVM一直都是学术界的东西,05年之后用于工业界.而这篇文章写在04年.本博最近听过一个关于LLVM的讨论会,会中有资深人士提到LLVM现在越来越像一个普通的编译器。说这番话的意思是,我们可以从这篇文章里找到LLVM的架构设计和早期的一些实现思想,但请不要迷信LLVM现在有多么神奇,每个架构都会有它的优缺点。 这篇文章,我现在已经读完了理论和介绍部分,性能评测部分还没有读。所以标题里面加了个1,因为接下来,还想作几件事,一是读完文章,二是跟踪一下Chris Lattner最近几年的文章,三是尝试将Open64和LLVM做个对比,最后看看代码。所以敬请期待之后的系列文章。
