Linux on POWER 中的 GNU C/C 工具链(4)
2008-02-23 05:41:12来源:互联网 阅读 ()
堆栈的反向跟踪(stack backtrace)能够用来研究程式究竟是如何执行的。假如程式出错,那么反向跟踪能够提供一些内幕信息,说明究竟是哪个函数调用应该对这个问题负责。即使程式执行成功了,反向调用也能够用来研究程式是否是按照程式员所想象得那样执行。反向跟踪依赖于构成程式的对象中的 frame 指针。
为对象生成 frame 指针,既无需 32 位的 ABI for Linux on POWER,也无需 64 位的 ABI for Linux on POWER。这会使得调试变得更为复杂,尤其是建立反向跟踪之后。frame 的信息在 GCC 中能够使用 -fexceptions 标记来产生。这个选项会告诉 GCC 来实现在使用调试程式展开堆栈时所需要的反向跟踪信息。虽然这会增加数据的大小,但是应该不会影响程式的执行。-fexceptions 标记对于 C 程式默认是启用的,而对于 C 程式默认是禁用的(这可能会需要和 C 对象中的异常处理程式进行交互)。因此,假如假如 C 代码希望处理 C 程式所触发的异常,那么就必须在 C 程式的编译标记中加上 -fexceptions 标记。
在某些架构上,异常处理必须使用 Call Frame Information 指令进行管理。这些指令用来在汇编中引导异常的处理。在 Linux on POWER 上也能够使用这些指令,由于某些原因(例如,代码的可移植性),GCC 所成城的异常处理信息还是不够的。
特定于 POWER 架构的选项
尽管 GNU 工具链的重点是可移植性,但是每种架构都有自己特别的长处,研发人员必须理解如何充分地利用这些长处来实现最好的性能。这一节将介绍 GCC Linux on POWER 能够接受的特定于架构的一些选项。
Power 架构家族和 GCC
POWER 和 PowerPC 处理器从 IBM 801 到 POWER5 已经历了一段漫长的路程,并广泛应用于各个领域:从手表到企业级的服务器无所不在。POWER 是最初的架构的名字,PowerPC 则起源于 Apple、IBM、Motorola 在 1990 年的合作项目。这两个系列是单独进行研发的,但是从发布以来,POWER5 和 PowerPC970FX 的结果就领先了业界 10 年之上。不管在多么广泛的产品中采用,这两个架构系列所具备的通用指令都能够为代码提供很好的可移植性。虽然 IBM 还会不断推出更新的和 POWER 架构类似的芯片,但是对于 GCC 来说,PowerPC 也包含了任何最新的处理器。
架构标记
GCC 对于 POWER 架构能够使用两类扩展指令。第一个集合是为早期的 RS/6000 架构设计的,能够使用 -mpower 标记启用。最近的 POWER 或 PowerPC 硬件不能使用这个标记。相反,他们使用 -mpowerpc 选项,或他们的 64 位对应的选项 -mpowerpc64,来使用现代 POWER 和 PowerPC 硬件所通用的指令。对于那些希望仍然对传统的 POWER 硬件提供支持的研发人员来说,要么同时使用 -mpower 和 -mpowerpc 标记,要么一个标记也不使用,这是因为这两个标记每个都只启用了针对每一个处理器系列的扩展。假如这两个标记一个都不使用,那么就只会使用那些这两种架构所通用的那些指令。然而,要想对性能进行优化,我们建议您使用 CPU 特有的标记。
CPU 特有的架构标记
CPU 特有的优化标记比处理器系列标记更能提高程式的性能。这些标记会通知编译器为某个特定的 CPU 生成最优化的代码,但是这些代码可能并不能在其他平台上运行。-mtune= 标记用来为一种给定的 CPU 指定调度参数,但是他并不会配置架构的类型、寄存器的用法连同记忆变量。这些是通过 -mcpu= 标记进行控制的。
-mtune= 标记的用法如下:
$ gcc -O3 -mtune=power5 -o foo foo.c foo2.c
这个例子引导编译器将源文档 foo.c 和 foo2.c 编译成一个可执行文档,使用优化级别 3,并使用为 POWER5 CPU 定制的调度参数。
-mcpu= 标记的用法如下:
$ gcc -O3 -mcpu=power5 -o foo foo.c foo2.c
这个例子引导编译器将源文档 foo.c 和 foo2.c 编译成一个可执行文档,使用优化级别 3,并使用为 POWER5 CPU 定制的调度参数、记忆变量、架构类型连同寄存器的用法。
熟悉 IBM XL C/C 的研发人员可能会注意到此处的一个差别。使用 XL C/C 时,对应的标记是 -qtune= 和 -qarch=,分别对应 -mtune= 和 -mcpu=。
-mtune= 和 -mcpu= 都能够使用 common 选项,这样会选择 Power 和 PowerPC 架构处理器通用的一个指令集。例如:
$ gcc -O3 -mtune=common -mcpu=common -o foo foo.c foo2.c
这个例子会从源文档 foo.c 和 foo2.c 生成一个使用级别 3 进行优化的二进制文档,他能够在任何 POWER 和 PowerPC 处理器上运行,只使用了这两个架构所通用的一些指令。然而,这个二进制文档的性能可能不如使用 CPU 特有的标记进行优化所得到的二进制文档的性能好。另外,powerpc、powerpc64 和 power 选项都能够用来指定自己的 CPU 属性。
这两个选项的全部合法范围包括对旧集合和新机器的支持。然而,POWER 架构上的企业级 Linux 发行版只支持常见的 power3、power4、power5、970、powerpc 和 powerpc64 选项,因为他们都有为企业级硬件所设计的相关指令集。请参阅 GCC 手册中对所支持的指令集和处理器的周详清单。(请参阅 参考资料。)
Vector Multimedia eXtension
Vector Multimedia eXtension,简称 VMX,是 POWER 处理器的单指令多数据(SIMD)架构的扩展。VMX 是由 Apple、IBM、Motorola PowerPC 联合研发的,每个成员都使用一个不同的名字在市场上进行销售。IBM 称之为 VMX,这是这种技术最原始的代号;而 Apple 称之为 Velocity Engine®;Motorola 使用的名字是 AltiVec®。GCC 并不能识别这种技术的商标名,但是他实现了对这些处理器指令的支持,他使用 AltiVec 作为相关标记的名字。
VMX 提供了 32 个附加 128 位的寄存器来保存向量数据,这能够提供 16 个 8 位的值、8 个 16 位的值或 4 个 32 位的值。(注意 VMX 寄存器不能操作 64 位的值。)这些寄存器和对其进行操作的 162 条处理器指令就是为什么在处理特别类型数据时 VMX 能够极大提高性能的原因。例如,我们能够使用向量来并行处理 4 个整数,这需要为此目的而特别编写代码。
虽然 VMX 为某些算法提供了巨大的长处,但是代码的编写必须实现向量化。不幸的是,对于编译器来说,没有什么魔力能够在后台实现 "自动向量化(autovectorization)"。C 语言中有一些指令能够对底层寄存器的选择提供控制。这些指令、原型连同宏都是在 GNU 的 altivec.h 文档中定义的,能够用来帮助实现这个任务。注意在使用 IBM XL C/C 时,并不用显式地在源程式中包含 altivec.h,而在使用 GCC 时,则必须显式地包含这个文档。GCC 为 AltiVec 的内置函数在 GCC 手册的 5.4 节中进行了介绍。(请参阅 参考资料。)
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
下一篇: GCC 4.0 的新特性
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash
