使用如下命令,统计了一下这三个编译器的代码行数情况。
find . -type f -not -regex '\./\.git.*' | xargs cat | wc -l

结果如下,供参考。这三个编译器使用的都是各个代码库中的最新版本,因为《编译点滴》使用git svn工具,所以命令行里有“git”,而标明的版本号却是SVN的。
Open64(SVN R3782):

open64$ find . -type f -not -regex '\./\.git.*' | xargs cat | wc -l
13164644

LLVM(LLVM R148206, 包含Clang  ):
llvm$ find . -type f -not -regex '\./\.git.*' | xargs cat | wc -l
2468255

GCC(R183190):
gcc$ find . -type f -not -regex '\./\.git.*' | xargs cat | wc -l
12823155

 

估计很多朋友都关注到了,LLVM 终于发布了3.0版本,这个版本有哪些新的变化呢?我们先从三个大的特性看起。

Continue reading »

 

有图有真相!且主打和GCC兼容。

LLVM广告

 

Nico Weber在Clang的maillist里发布了条可喜消息,clang已经能成功编译chromium。
Clang是LLVM的前端,前不久实现了C语言的自举,最近又成功编译了chromium,而且没有运行问题,可喜可贺。编译使用的版本clang r116145,平台MacBook Pro 4G内存,I5处理器.

编译时间上,Clang比GCC快了10%-87%.编译出的可执行文件clang比gcc小10%。针对Google V8 JavaScript的性能测试显示,gcc和clang的性能差不多。HTML的相关测试,clang也和gcc相差不多,稍好一点(clang 5077->gcc 5163)。gcc版本 gcc-4.2.1

clang的不足,编译GPU硬件加速相关代码会很耗时和内存,可能有bug。如果调过此bug,clang的编译速度可能还会稍快一些。

这里说了如何用clang编译chromium。是编译后的记录文件。这是邮件全文:http://permalink.gmane.org/gmane.comp.compilers.clang.devel/11246

评:

  • Clang正在慢慢成熟,正确性方面也在不断提升,值得庆贺。
  • clang一直标榜的高速编译,在上面的测试中有所体现,但并不是那么明显。
  • 编译所得的性能个人感觉不具说服力。因为chromium中Javascript的性能是用JIT的,而JIT这部分是clang编译出的解释器把javascript的代码再编译成可执行码。所以clang只要保证解释器中jit部分所得的代码性能对JIT的性能影响微乎其微。
 

LLVM2.7已经发布好几天了。今天尝试一下:)

1,下载相关源码包:

wget -c http://llvm.org/releases/2.7/llvm-2.7.tgz
wget -c http://llvm.org/releases/2.7/clang-2.7.tgz
wget -c http://llvm.org/releases/2.7/llvm-gcc-4.2-2.7.source.tgz
wget -c http://llvm.org/releases/2.7/llvm-test-2.7.tgz

llvm-2.7.tgz是LLVM的主要源码包,clang-2.7.tgz:Clang前端,llvm-gcc-4.2-2.7.source.tgz:GCC4.2前端,llvm-test-2.7.tgz:LLVM 测试验证包。
Continue reading »

 

因为之前的两篇博文前瞻-全时优化和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都能从这里找到。

Continue reading »

 

上篇文章,以论文为主要依据,介绍了LLVM的概况和中间表示,本篇关注论文的后半部分内容–架构设计和LLVM的整体评测:

LLVM的架构设计:

总览

LLVM的架构设计以让传统的链接时,安装时,运行时和空闲时代码转换都能透明地在LLVM中间表示上展开为目的。上图就是LLVM的高层设计架构。包括静态的编译器前端用于生成LLVM中间表示;连接器用于做连接时优化,尤其是过程间优化。连接器的输出被JIT或者机器代码生成器生成机器代码。在机器代码生成时,可以通过插入低代价的抽样指令来测量运行时的profile,检测热代码,并将空闲时进行优化。

Continue reading »

 

LLVM新版本相对于2.6增加了很多新特性并对很多功能做了改进.包括生成代码质量显著提高、生成调试信息的改进以及核心架构生的很多新特性。最令人兴奋的特性是Clang(LLVM的前端)能自举。自举是任何编译器实际开发中最令人兴奋的里程碑,而且也标志着Clang对复杂的C++标准大部分支持。

LLVM是苹果公司主导开发的下一代编译器,目标是能实现全时优化,即在编译时静态分析源代码实现优化;链接时分析所有源码文件做更加激进有效的过程间优化;运行时使用实时编译进行实时优化,并采集使用信息;空闲时利用使用信息实现反馈优化。但目前LLVM还很不完善,很多功能还亟待开发和完善。目前LLVM仅支持C语言和部分C++.

LLVM已经应用在不少场合。如,Google用它作为一个Python解释器的底层实现(Unladen Swallow)。苹果公司用它实现Mac OS中OpenCL的底层支持。

Chris Lattner 声明 LLVM 2.7发布的邮件
LLVM 2.7 release notes

 

读论文<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做个对比,最后看看代码。所以敬请期待之后的系列文章。
Continue reading »

2009-2011© 编译点滴 Suffusion theme by Sayontan Sinha

无觅相关文章插件,快速提升流量