将Linux C/C++应用程序从x86平台移植到IBM PowerLinux(7)
- UID
- 1029342
- 性别
- 男
|
将Linux C/C++应用程序从x86平台移植到IBM PowerLinux(7)
使用 GCC 构建大型程序
客户有时需要构建一个在运行时生成的非常大的可执行文件。清单 5 中给出了一条常见的错误消息。
清单 5. 构建大型可执行文件时的错误消息
modelfile.cxx.o.text+0x212012): relocation truncated to fit: R_PPC64_TOC16_DS against `.toc'+10000 这是大型程序和旧 GCC 编译器的一个常见问题。旧 GCC 编译器乐观地假设目录 (table of contents, TOC) 不会溢出单个加载指令的 64 KB 范围。在这种情况下,该程序很大,需要的所有 TOC 条目的总和超过 16 位 (TOC16_DS)。
有两个解决方案。
- 对于 Advance Toolchain 3.0 和旧编译器,可以使用 -mminimal-toc 进行重新编译。
- 对于 Advance Toolchain 4.0 和更高版本的编译器,可以使用 -mcmodel=medium 进行重新编译。-mcmodel=medium 应具有更好的性能,但需要升级。
移植步骤
完成每个计划步骤后,应该已经准备为执行移植做好了准备。本节将介绍成功将应用程序移植到 Linux on Power 的推荐步骤。
- 将构建系统迁移到 GNU Make(如果有必要)
这是构建一个或多个 makefile 的过程。您还可以利用 GNU 的程序构建自动化实用程序,比如 Autoconf、Automake 和 Buildtool,以便最大程度地提高您的程序跨不同 UNIX® 平台移植的能力。GNU 的程序构建自动化实用程序位于 directory.fsf.org/devel/build/。 - 修改依赖于架构的代码(如果有必要)
考虑字节顺序、32 位和 64 位模型下的数据长度,以及不同平台上的数据对齐方式,这些已经在 理解 x86 与 Power Architecture 衍生产品之间的差异 一节中介绍过。 - 在 构建
构建 makefile 并修改了所有程序后,构建流程很简单,只需发出一个命令,比如 make。如果在构建过程中遇到错误,这些错误通常是编译器和链接器错误,以及程序语法错误。通过 makefile 修改编译器选项或修改代码中的引起问题的语法,通常可以修复错误。编译器参考菜单和编程指南是此阶段的最佳参考资料。对于 IBM XL C/C++,请参阅 XL C/C++ for Linux 编译器参考 (compiler.pdf) 和 XL C/C++ for Linux 编程指南 (proguide.pdf)。对于 GCC,编译藏靠和编程指南都在 gcc.gnu.org/onlinedocs 上。 - 测试和问题排除
成功构建程序后,测试其中是否有运行时错误。运行时错误通常与此阶段的程序逻辑相关。编写多个测试程序来验证应用程序的输出是否满足预期,总是一种不错的想法。 - 调优性能
移植的代码已在 Power 平台上运行后,可监视它以确保它按预期执行。如果不符合预期,您需要完成性能调优。可使用以下工具套件识别应用程序中的性能问题,显示应用程序与 Linux 内核的交互情况。- OProfile
OProfile 工具分析基于硬件相关事件的代码,比如缓存遗漏理器周期。例如,OProfile 可帮助确定导致大部分缓存遗漏错误的来源例程。OProfile 使用了许多处理器中提供的硬件性能计数器,包括 IBM POWER6 和 POWER7。有关 OProfile for Power Linux 的更多信息,请访问 OProfile 网站。 - 链接后优化 - 也称为 FDPRpro
链接后优化工具通过在程序用于执行一些典型工作负载时收集程序的行为信息,优化该程序的可执行镜像。然后,它会重新分析该程序(结合收集的概要文件),应用全局优化(包括程序重构),以及创建一个针对该工作负载而优化的新程序版本。该优化器生成的新程序通常比原始程序运行得更快,使用的真实内存更少。有关更多信息,请访问链接后优化网站。 - 包
如果移植的应用程序将是一个商业产品,或者想要将该应用程序分发给第三方来安装,那么您需要打包移植的应用程序,包含库、文档,有时还包含源代码。Linux 提供了多种方式来打包应用程序,比如 .tar 文件、自安装的 shell 脚本,以及 RPM。RPM 是用于 Linux 的最流行的打包工具之一。 图 7. 上述 1 至 6 步中描述的移植活动流
结束语
Linux on Power 提供了一个企业级 Linux 环境,其中同时包含 32 位和 64 位应用程序环境和工具链。Linux on Power 提供了两组编译器,它们简化了开源代码的移植和对屡获殊荣的 Power Architecture 的高性能的利用。通过将 Linux on x86 应用程序移植到 Linux on Power,您可以利用 Power Architecture 上提供的应用程序性能,这一性能现在还得到了 Linux 操作系统上之前从未提供过的开发工具的增强。总之,Linux on Power 是一个部署高性能 Linux 应用程序的领先平台。 |
|
|
|
|
|