首页 >科技周边 >IT业界 >Ampere处理器GCC指南

Ampere处理器GCC指南

尊渡假赌尊渡假赌尊渡假赌
尊渡假赌尊渡假赌尊渡假赌原创
2025-02-08 12:23:09475浏览

Ampere处理器GCC指南

本文最初是由Ampere Computing发表的。 本文介绍了如何有效地使用GNU编译器收集(GCC)选项来帮助优化Ampere处理器上的应用程序性能。

尝试优化应用程序时,必须衡量潜在优化是否改善性能至关重要。这包括编译器选项。使用高级编译器选项可能会导致更好的运行时性能,这可能是出于增加编译时间,更多调试困难以及通常会增加二进制尺寸的成本。为什么编译器选项影响性能超出了本文的范围,尽管简短的答案是代码生成,现代处理器体系结构以及它们如何相互作用非常复杂!另一个重要的一点是,由于计算机体系结构的变化和特定的微结构,不同的处理器可能会从不同的编译器选项中受益。优化的重复实验是绩效成功的关键。

>如何衡量应用程序的绩效来确定限制因素以及以前发表的文章中已经涵盖的优化策略。该论文是在基于安培的阿尔特拉(Ampere Altra)实例上运行时要回答的前10个问题,它描述了要收集的性能数据以了解整个系统的性能。优化Ampere Altra家族处理器的性能分析方法解释了如何使用数据驱动方法有效地优化。

>本文首先总结了最常见的GCC选项,并描述了这些选项如何影响应用程序。然后,讨论使用GCC选项转向目前的案例研究,以提高Ampere处理器的VP9视频编码软件和MySQL数据库的性能。有效地使用了类似的策略来优化安培处理器上运行的其他软件。

GCC建议

GCC编译器提供了许多可以改善应用程序性能的选项。有关详细信息,请参见GCC网站。要生成利用Ampere处理器中可用的所有性能功能的代码,请使用GCC -MCPU选项。

>使用GCC -MCPU选项,要么设置CPU模型,要么告诉GCC使用基于GCC在VIA -MCPU =本机上运行的机器的CPU模型。注释基于旧版X86的系统,GCC -MCPU是-Mtune的不弃用同义词,而GCC -MCPU在基于ARM的系统上得到了完全支持。有关详细信息,请参见ARM的编译器标志指南:-March,-mtune和-mcpu。

总而言之,只要可能,在编译ARM时仅使用-MCPU,然后避免-march和-mtune。以下是一个案例研究,通过使用VP9视频编码软件设置GCC -MCPU选项来突出显示性能的提高。

设置-MCPU选项:

  • -MCPU = Ampere1:生成将在安培处理器上运行的代码。 Ampereone是从安培的下一代云本地处理器,将高性能处理器的家族扩展到新的行业领先的核心计数。请注意,这可以生成不会在Ampere Altra和Altra Max处理器上运行的代码。此选项最初在GCC版本12.1及更高版本中可用,然后回到GCC 10.5和GCC 11.3。

  • -MCPU = Neoverse-N1:生成将在Ampere Altra,Ampere Altra Max和Ampere AmpereOne上运行的代码。在支持将在安培安培中运行的代码使用此选项,但它可能不会利用所有可用的新绩效功能。请注意,需要GCC版本9.1或更高版本才能为Ampere Altra和Ampere Altra Max处理器启用CPU特定调谐。

  • -MCPU =本机:生成代码基于CPU GCC正在运行的CPU模型。注意,需要GCC版本9.1或更高版本以启用Ampere Altra和Ampere Altra Max处理器的CPU特定调谐。

使用-mcpu =本机的使用可能更易于使用,尽管如果在其他系统上使用可执行文件,共享库或对象文件,则可能存在潜在的问题。如果在安培安培处理器上完成构建,则该代码可能无法在安培的Altra或Altra Max处理器上运行,因为生成的代码可能包括AMPERE安培处理器支持的ARMV8.6指令。 如果在Ampere Altra或Altra Max处理器上完成构建,则GCC将不会利用安培安培处理器上可用的最新性能改进。当构建代码以利用任何体系结构的性能功能时,这是一个一般问题。

>下表列出了支持Ampere处理器-MCPU值的GCC版本。

>处理器 -MCPU值 gcc 9 gcc 10 gcc 11 GCC 12 > gcc 13 安培的醒目 Neoverse-N1 ≥9.1 全部 全部 全部 全部 安培·奥特拉(Ampere Altra Max) Neoverse-N1 ≥9.1 全部 全部 全部 全部 安培 Ampere1 N/A。 ≥10.5 ≥11.3 ≥12.1 全部

>我们的建议是使用上述适当的值使用GCC -MCPU选项(-mcpu = ampere1,-mcpu = neoverse -n1或-mcpu =本机)和-O2来建立性能的基线,然后探索其他优化选项并衡量与基线相比,不同的选项是否提高了性能。

>

常见GCC选项的摘要:

  • 在构建Ampere处理器上,建议使用

    -MCPU,以启用处理器特定的调整和优化。 (有关详细信息,请参见上面的讨论“设置-MCPU选项”部分。)

    >
  • 如果您的应用程序受到获取说明的限制,则

    -OS可以优化以减少代码大小。

  • -O2被认为是标准的GCC优化选项,并且可以用作与其他GCC选项进行比较的基准。

  • -O3添加了其他优化,以生成更有效的循环代码,如果您的应用程序性能在循环中所花费的时间主导,则可以尝试使用。

  • 配置文件指导优化(PGO):-frofile -fer -fofile -fofile -use。生成编译器将使用的配置文件数据有潜在地对优化做出更好的决策,例如内部,循环优化和默认分支。这被认为是高级优化,因为它需要更改构建系统,请参见下文。

  • >链接时间优化(LTO):-flto。启用链接时间优化,允许编译器在各个源文件上进行优化。这使得在其他编译器优化以及其他编译器优化和其他编译器优化方面可以将函数在源文件上进行串联。这也被认为是高级优化,可能需要更改构建系统。此选项增加了整体构建时间,这对于大型应用程序可能是戏剧性的。可以将LTO仅在绩效关键源文件上使用,以减少构建时间。

> VP9视频编码案例研究与GCC -MCPU

VP9是由Google开发的视频编码格式。 LIBVPX是Google的VP8和VP9视频编解码器的开源参考软件实现,以及Open Media联盟(AOMEDIA)。 LIBVPX在X264上提供了显着改善,并花费了额外的计算时间。有关VP9和LIBVPX的其他信息,请访问Wikipedia。 在本案例研究中,VP9构建被配置为使用GCC -MCPU =本机选项来提高性能。如上所述,在编译安培处理器上时,请使用-MCPU选项以启用CPU特定的调整和优化。最初,使用默认配置构建了libvpx,然后使用-mcpu =本机进行重建。为了评估VP9性能,使用了1080p输入视频文件,使用了YouTube的用户生成的内容数据集的Original_videos_sports_sports_1080p_sports_1080p-0063.mkv。有关如何构建FFMPEG和包括Ampere处理器的VP9在内的各种编解码器,请参见Ampere的FFMPEG调整和构建指南。

>

>默认的libvpx构建:

如何使用-mcpu =本机

优化libvpx构建
$ git clone https://chromium.googlesource.com/webm/libvpx
$ cd libvpx/
$ export CFLAGS="-mcpu=native -DNDEBUG -O3 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=0 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -Wall -Wdeclaration-after-statement -Wdisabled-optimization -Wfloat-conversion -Wformat=2 -Wpointer-arith -Wtype-limits -Wcast-qual -Wvla -Wimplicit-function-declaration -Wmissing-declarations -Wmissing-prototypes -Wuninitialized -Wunused -Wextra -Wundef -Wframe-larger-than=52000 -std=gnu89"
$ export CXXFLAGS="-mcpu=native -DNDEBUG -O3 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=0 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -Wall -Wdisabled-optimization -Wextra-semi -Wfloat-conversion -Wformat=2 -Wpointer-arith -Wtype-limits -Wcast-qual -Wvla -Wmissing-declarations -Wuninitialized -Wunused -Wextra -Wno-psabi -Wc++14-extensions -Wc++17-extensions -Wc++20-extensions -std=gnu++11 -std=gnu++11"
$ ./configure
$ make verbose=1 
$ ./vpxenc --codec=vp9 --profile=0 --height=1080 --width=1920 --fps=25/1 --limit=100 -o output.mkv /home/joneill/Videos/original_videos_Sports_1080P_Sports_1080P-0063.mkv --target-bitrate=2073600 --good --passes=1 --threads=1 –debug

使用Linux Perf的调查测量功能中CPU周期的数量,该函数花费了最多的时间包括函数VPX_Convolve8_Horiz_Neon和VPX_Convolve8_vert_neon。 LIBVPX GIT存储库表明,通过ARM优化了这些功能以使用ARMV8.6-A USDOT(混合符号点产物)指令,该指令由Ampere处理器支持。

。使用GCC -MCPU =天然,在VPX_Convolve8_Horiz_Neon中花费的CPU周期从6.07e 11减少到2.52e 11,以在Ampere Altra处理器上启用点产品优化,从而将CPU周期减少为2.4x。

对于VPX_Convolve8_vert_neon,

将CPU周期从2.46E 11减少到2.07e 11,以减少16%。

总体而言,使用-mcpu =天然来启用DOT产品指令加速编码文件Original_videos_sports_sports_1080p_sports_sports_1080p -0063.mkv在AMPERE ALTRA处理器上通过改进应用程序浏览器来启用7%。下表显示了使用Perf Record和Perf Report实用程序收集的数据,以测量CPU周期和指令退休。

构建config

符号 循环(%) 循环 >指令(%) >指令 默认构建 vpx_convolve8_horiz_neon 8.72 6.07e 11 7.52 1.13e 12 vpx_convolve8_vert_neon 3.53 2.46 E11 2.51 3.78e 11 整个应用程序 100 6.97e 10 100 1.48e 11 -mcpu =本机 vpx_convolve8_horiz_neon 3.89 2.52E 11 3.87 5.71E 11 vpx_convolve8_vert_neon 3.19 2.07 E11 3.29 4.86e 11 整个应用程序 100 6.48e 10 100 1.48e 11 > GCC配置文件指导优化 >本节概述了GCC的配置文件指导优化(PGO)和用PGO优化MySQL的案例研究。配置指南的优化使GCC能够做出更好的优化决策,包括优化分支,代码块重新排序,通过循环展开,循环剥离和矢量化来融合功能和循环优化。使用PGO需要修改构建环境才能进行三部分构建。

>使用配置文件的优化构建应用程序,GCC -FROFILE生成。

在代表工作负载上运行应用程序以生成配置文件数据。

>使用配置文件数据,gcc -fprofile -use。
  1. 使用PGO的挑战是上面步骤2中极高的性能开销。由于运行使用GCC -FROFILE生成的应用程序的性能缓慢,因此在生产环境中运行的系统运行可能是不切实际的。请参阅GCC手册的程序仪器选项部分,以使用运行时仪器和使用生成的配置文件信息进行优化进行优化的部分构建应用程序,以获取其他详细信息。
  2. 如GCC手册中所述,建议用于多线程应用程序,并可以通过收集改进的配置文件数据来提高性能。

    何时使用PGO?

    >使用PGO,GCC可以通过提供其他信息,例如测量分支,而不是采用并测量循环跳闸计数来更好地优化应用程序。 PGO是一种有用的优化,可以尝试查看其是否提高性能。 PGO可能有助于包括分支错误预测的应用程序的性能签名,可以使用Perf Utility读取CPU的性能监控单元(PMU)计数器BR_MIS_PRED_RETIED。大量的分支错误预测导致前端摊位的很高比例,可以通过Stall_frontend PMU计数器进行测量。具有高L2指令的申请缓存率也可能受益于PGO,可能与错误预测的分支机构有关。总而言之,很大一部分分支机构错误预测,CPU前端摊位和L2指令cache遗漏是绩效签名,PGO可以提高性能。

    > MySQL数据库GCC PGO案例研究

    MySQL是世界上最受欢迎的开源数据库,由于MySQL二进制尺寸巨大,是使用GCC PGO优化的理想候选者。没有PGO信息,海湾合作委员会就无法正确预测执行的许多不同代码路径。使用PGO极大地减少了分支错误预测,L2指令cache MISS率和CPU前端档位上的Ampere Altra Max处理器。

    总结使用GCC PGO优化MySQL的方式:

    Sysbench用于评估MySQL性能

    使用MySQL MTR(MySQL-Test-run)测试套件
    1. GCC PGO
    2. 与默认构建相比 然后将所使用的线程数从1到1024变化,OLTP_POINT_SELECT的平均速度为29%,在Ampere Altra Max M128-30处理器上测试的OLTP_READ_ONLY测试为20%。
    3. 有64个线程,PGO通过改进MySQL的吞吐量
    4. 提高了32%
    5. 其他详细信息可以在Ampere开发人员的网站上找到MySQL Tuning Guide。
    6. 摘要
    7. 优化应用程序需要实验不同的策略,以确定哪种作用最佳。本文为不同的海湾合作委员会编译器优化提供了建议,以生成在安培处理器上运行的高性能应用程序。它突出显示了使用-MCPU选项作为生成代码的最简单方法,该代码利用了Ampere Cloud Native处理器支持的所有功能。针对MySQL数据库和VP9视频编码器的两个案例研究显示了使用GCC选项来优化这些应用程序至关重要的这些应用程序。Ampere的第一个云本地处理器为可持续云计算而构建的

      >可预测的高性能,平台可扩展性和功率效率在行业中提供了前所未有的。我们邀请您了解有关开发人员工作的更多信息,并在developer.amperecomputing.com上找到最佳实践,并加入community.amperecomputing.com。

以上是Ampere处理器GCC指南的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn