-
认识 GCC 4
2009-03-11
版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
http://cbkid.blogbus.com/logs/36407046.html
简史:
GNU C Compiler -> GNU Compiler Collection开始之前:
编译器是以一种管道架构来构造的,这种架构由几个阶段(stage)组成,每个阶段处理不同格式的数据(见图 2)。编译器的前端是特定于语言的,它包括一个用于给定语言的解析器,这个解析器产生经过解析的树和中间表示(Register Transfer Language,RTL)。然后,后端负责使用这种独立于语言的表示,并产生用于特定的目标架构的指令。为此,优化器使用 RTL 创建快速的或紧凑的代码(或者两者兼顾)。然后,优化后的 RTL 被提供给代码生成器,后者产生目标代码。GCC的核心变化:
实际上,在 GCC 4 中,某些警告显示为错误
GCC 4 的一个缺点是,它与用 GCC 3 编译器构建的对象不是二进制兼容的(这意味着源代码必须用 GCC 4 来编译)
4.0 发行版系列
引入了新的优化框架(Tree SSA)和支持自动向量化(autovectorization)。
在 GCC 4 之前,中间表示曾被称作 Register Transfer Language(RTL)。RTL 是非常接近于汇编语言的一种低级的表示(受 LISP S 表达式的影响)。RTL 的问题是,它支持的优化是接近于目标的。需要关于程序的高级信息的优化可能无法实现,因为无法用 RTL 表达它们。Tree SSA 被设计为既独立于语言又独立于目标,同时还支持更先进的分析和更丰富的优化。
Tree SSA 引入了 2 种新的中间表示法。第一种是 GENERIC,它是一种通用的树表示法,由语言前端树构成。GENERIC 树被转换成 GIMPLE 形式,进而转换成控制流图,以支持基于 SSA 的优化。最后,SSA 树被转换成 RTL,后者被后端用于目标生成代码。这是一个过度简化的描述,但是其结果是一种新的中间形式,这种形式更适合于高级和低级优化。
Autovectorization 这个特性允许编译器在受益于目标处理器的向量指令的代码中识别标量处理循环。另一种基于循环的优化是 Swing Modulo Scheduling(SMS),这种优化用于构造指令管道,其目的是通过利用指令级并行减少处理器周期。
引入了新语言的支持
4.1 发行版系列
改进的概要分析(profiling)支持和更准确的分支可能性估计。更好的内联支持和利用指令缓存局部性的能力。当需要内联函数时,编译器不再内联那些不常执行的函数。相反,热调用点(hot call site)更可能被内联,以使代码尽量短小,同时仍获得内联函数的优点。GCC 还可以帮助将函数划分到热区和冷区。与将冷函数填入缓存相比,将热函数(也就是那些更常用的函数)放在一起可以更好地利用指令缓存。
前端有很多的更新,包括对 Objective-C++ 的支持。还有很多用于 Java 核心库(libgc)的更新。后端则引入了对 IBM® System z™ 9-109 处理器的支持,包括 128 位 Institute of Electrical and Electronics Engineers(IEEE)浮点数和内建的原子内存访问。如果那还不够,后端现在还可以产生防止栈溢出(stack-smashing)攻击的代码(即缓冲区溢出检测和重排,以防止指针泄漏)。有些内建的函数也已经被更新,以较小的开销防止缓冲区溢出。
4.2 发行版系列
增加了用于 C、C++ 和 Fortran 编译器的 OpenMP。OpenMP 是一个多线程实现,它允许编译器为任务和数据并行生成代码。
OpenMP 的一种用法是,使用预处理程序指令注释其中应该发生并行的代码。该代码在执行块期间转换为一个多线程程序,当块中的每个线程完成时,各个线程再结合起来。
4.3 发行版系列
它还支持 Thumb2(压缩的 ARM 指令)和 ARMv7 架构的编译器和库,支持对 Core2 处理器和 Geode 处理器家族进行调优。
在编译器的前端,GIMPLE 的内部表示被重新定义,这意味着编译器将消耗更少的内存。
结束语
显然,GCC 的前景是光明的。工具链不断发展 —包括架构上的发展和增量式的发展— 以支持最新的处理器架构。GCC 很好地覆盖了各种语言。目前正在开发对很多不同语言的支持,例如 Mercury、GHDL(用于 VHDL 的 GCC 前端)以及 Unified Parallel C 语言(UPC)。
GCC 除了拥有光明的前景外,它的不断改善将使所有类型的软件受益,包括 Linux、Berkeley Software Distribution [BSD] 和 Apache 等软件。用 GCC 4 编译的软件通常更加紧凑和快速,这意味着软件行业的全面改善。随机文章:
浅谈L、月、M、N的各项能力(一)(思维能力) 2009-03-08案例 2009-02-24console无法正确显示英文信息 2008-11-02XML介绍 2008-06-03[转]cscope+vim用法 2008-04-26
收藏到:Del.icio.us









