ホームページ > テクノロジー周辺機器 > IT業界 > アンペアプロセッサ用のGCCガイド

アンペアプロセッサ用のGCCガイド

尊渡假赌尊渡假赌尊渡假赌
リリース: 2025-02-08 12:23:09
オリジナル
479 人が閲覧しました

アンペアプロセッサ用のGCCガイド

この記事は、もともとAmpere Computingによって公開されました このペーパーでは、Ampereプロセッサのアプリケーションパフォーマンスを最適化するためにGNUコンパイラコレクション(GCC)オプションを効果的に使用する方法について説明します。

アプリケーションを最適化しようとする場合、潜在的な最適化がパフォーマンスを改善するかどうかを測定することが不可欠です。これには、コンパイラオプションが含まれます。高度なコンパイラオプションを使用すると、コンパイル時間の増加、デバッグの難しさの増加、およびしばしばバイナリサイズが増加する可能性があるため、ランタイムパフォーマンスが向上する可能性があります。コンパイラオプションがパフォーマンスに影響する理由はこのペーパーの範囲を超えていますが、短い答えは、コード生成、最新のプロセッサアーキテクチャ、およびそれらの相互作用方法が非常に複雑であるということです。別の重要な点は、コンピューターアーキテクチャの変動と特定のマイクロアーキテクチャのため、異なるプロセッサが異なるコンパイラオプションから恩恵を受ける可能性があることです。最適化を繰り返し実験することは、パフォーマンスの成功の鍵です

アプリケーションのパフォーマンスを測定して制限要因を決定する方法と、最適化戦略は、以前に公開された記事ですでに取り上げられています。 Ampere Altraベースのインスタンスで実行中に答える最初の10の質問であるこの論文は、システム全体のパフォーマンスを理解するために収集するパフォーマンスデータについて説明します。 Ampere Altraファミリプロセッサを最適化するためのパフォーマンス分析方法論は、データ駆動型アプローチを使用して効果的かつ効率的に最適化する方法を説明します。

このペーパーでは、最初に最も一般的なGCCオプションを要約して、これらのオプションがアプリケーションにどのように影響するかを説明します。その後、議論はGCCオプションを使用してケーススタディを提示し、VP9ビデオエンコーディングソフトウェアとAmpereプロセッサのMySQLデータベースのパフォーマンスを改善します。同様の戦略が、Ampereプロセッサで実行される追加のソフトウェアを最適化するために効果的に使用されてきました。

gccの推奨事項

GCCコンパイラは、アプリケーションのパフォーマンスを改善できる多くのオプションを提供します。詳細については、GCC Webサイトをご覧ください。 Ampereプロセッサで利用可能なすべてのパフォーマンス機能を活用するコードを生成するには、GCC -MCPUオプションを使用します。

GCC -MCPUオプションを使用するには、CPUモデルを設定するか、GCCが-MCPU =ネイティブを介して実行されているマシンに基づいてCPUモデルを使用するようにGCCに指示します。 Legacy X86ベースのシステムに注意するGCC -MCPUは、-Mtuneの非推奨同義語ですが、GCC -MCPUはARMベースのシステムで完全にサポートされています。詳細については、アーキテクチャ全体のコンパイラフラグのガイド:-march、-mtune、および-mcpuを参照してください。

要約すると、可能な場合はいつでも、-MCPUのみを使用し、腕をコンパイルするときに-marchと-mtuneを回避します。以下は、VP9ビデオエンコードソフトウェアでGCC -MCPUオプションを設定することにより、パフォーマンスの向上を強調するケーススタディです。 -MCPUオプションの設定:

  • -MCPU = ampere1:Ampereoneプロセッサで実行されるコードを生成します。 Ampereoneは、Ampereの次世代クラウドネイティブプロセッサであり、高性能プロセッサのファミリーを新しい業界をリードするコアカウントに拡張します。これにより、Ampere AltraおよびAltra Maxプロセッサで実行されないコードを生成できます。このオプションは、最初はGCCバージョン12.1以降で利用可能でしたが、GCC 10.5およびGCC 11.3にバックポートしました。

  • -MCPU = neoverse-N1:アンペアアルトラ、アンペレアルトラマックス、およびアンペアアンペレオネで実行されるコードを生成します。 Ampere Ampereoneで実行されるコードにこのオプションを使用することがサポートされていますが、利用可能なすべての新しいパフォーマンス機能を利用できない可能性があります。注、Ampere AltraおよびAmpere Altra MaxプロセッサのCPU固有のチューニングを有効にするには、GCCバージョン9.1以下が必要です。

  • -MCPU =ネイティブ:CPU GCCが実行されているCPUモデルを設定するコードを生成します。注、Ampere AltraおよびAmpere Altra MaxプロセッサのCPU固有のチューニングを有効にするには、GCCバージョン9.1以下が必要です。

  • -MCPU =ネイティブを使用すると、使用が容易になりますが、実行可能ファイル、共有ライブラリ、またはオブジェクトファイルが別のシステムで使用されている場合は潜在的な問題があります。ビルドがアンペアアンペレオネプロセッサで行われた場合、生成されたコードにはアンペアアンペロンプロセッサでサポートされているARMV8.6命令が含まれる可能性があるため、コードはAmpere AltraまたはAltra Maxプロセッサで実行されない場合があります。 ビルドがAmpere AltraまたはAltra Maxプロセッサで行われた場合、GCCはAmpere Ampereoneプロセッサで利用可能な最新のパフォーマンスの改善を利用しません。これは、あらゆるアーキテクチャのパフォーマンス機能を活用するためのコードを構築する場合の一般的な問題です。

次の表には、Ampereプロセッサ-MCPU値をサポートするGCCバージョンを示します。

processor -MCPU値 gcc 9 gcc 10 gcc 11 gcc 12 gcc 13 アンペア・アルトラ Neoverse-N1 ≥9.1 全て 全て 全て 全て アンペアアルトラマックス Neoverse-N1 ≥9.1 全て 全て 全て 全て アンペレオネ ampere1 n/a ≥10.5 ≥11.3 ≥12.1 全て 上記の適切な値でGCC -MCPUオプションを使用することが推奨されます(-MCPU = ampere1、-MCPU = neoverse -n1または-mcpu = native)を使用することが-o2で、パフォーマンスのベースラインを確立し、さらに調べてください。最適化オプションと、異なるオプションがベースラインと比較してパフォーマンスを改善するかどうかを測定します。 一般的なGCCオプションの概要:

プロセッサ固有のチューニングと最適化を有効にするために、アンペアプロセッサを構築するときに推奨されます。 (詳細については、上記の「-MCPUオプションの設定」セクションを参照してください。)

  • -osは、手順を取得することでアプリケーションが制限されている場合、コードサイズを削減するために最適化します。

  • -O2は、標準のGCC最適化オプションを考慮し、他のGCCオプションと比較するためのベースラインとして使用するのに適しています。

  • -O3は、追加の最適化を追加してループのより効率的なコードを生成します。アプリケーションのパフォーマンスがループに費やされた時間に支配されているかどうかを試すのに役立ちます。

  • プロファイルガイド最適化(PGO):-fprofile -generate&-frofile -use。コンパイラが使用するプロファイルデータを生成し、インライン化、ループ最適化、デフォルトブランチなどの最適化についてより良い決定を下す可能性があります。これは、ビルドシステムの変更が必要なため、高度な最適化と見なされます。以下を参照してください。

  • リンク時間最適化(LTO):-flto。リンク時間の最適化を有効にし、コンパイラが個々のソースファイル間で最適化できるようにします。これにより、他のコンパイラの最適化の中で、ソースファイルに関数をインライン化できます。これも高度な最適化と見なされ、ビルドシステムの変更が必要になる可能性があります。このオプションは、全体的なビルド時間を長くします。これは、大規模なアプリケーションにとって劇的なものです。パフォーマンスの重要なソースファイルでLTOを使用して、ビルド時間を潜在的に減らすことができます。

vp9ビデオエンコードGCC -MCPU

によるケーススタディ

VP9は、Googleが開発したビデオコーディング形式です。 LIBVPXは、GoogleのVP8およびVP9ビデオコーデックのオープンソースリファレンスソフトウェア実装およびOpen MediaのAlliance(Aomedia)です。 LIBVPXは、追加の計算時間を費用して、X264を超えるビデオ圧縮を大幅に改善します。 VP9とLibvpxの追加情報はWikipediaで入手できます。 このケーススタディでは、VP9ビルドがGCC -MCPU =ネイティブオプションを使用してパフォーマンスを改善するように構成されています。上記のように、Ampereプロセッサをコンパイルするときに-MCPUオプションを使用して、CPU固有のチューニングと最適化を有効にします。当初、LIBVPXはデフォルトの構成を使用して構築され、-MCPU = nativeを使用して再構築されました。 VP9のパフォーマンスを評価するには、1080p入力ビデオファイル、Original_videos_sports_1080p_sports_1080p-0063.mkv YouTubeのユーザー生成コンテンツデータセットから使用されました。 AmpereのFFMPEGチューニングとビルドガイドを参照してください。FFMPEGを構築する方法と、Ampereプロセッサ用のVP9を含むさまざまなコーデックを構築する方法。

デフォルトのlibvpxビルド:

-MCPU = native

で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(混合したDOT-Product)命令を使用するように最適化されています。VPX_CONVOLVE8_HORIZ_NEONで使用されたCPUサイクルは、GCC -MCPU =ネイティブを使用して6.07E 11から2.52E 11に減少し、アンペアAltraプロセッサでDOT製品の最適化を可能にし、CPUサイクルを2.4xの係数で減らしました。

VPX_CONVOLVE8_VERT_NEONの場合、CPUサイクルは2.46E 11から2.07E 11に減少し、16%減少しました。

全体として、-mcpu = nativeを使用して、アプリケーションスループットを改善することにより、Ampere altraプロセッサでファイルOriginal_videos_sports_1080p_sports_1080p -0063.mkvをファイルのトランスコーディングアップアップアップしてsped upped up aped up aped up up up aped up up up upが有効にします。次の表は、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)の概要と、MySQLをPGOで最適化するケーススタディを概説します。プロファイルガイドの最適化により、GCCは、ブランチの最適化、コードブロックの再注文、関数の挿入、ループの展開、ループの剥離、およびベクトル化を介したループの最適化など、より良い最適化決定を行うことができます。 PGOを使用するには、3部構成のビルドを実行するためにビルド環境を変更する必要があります。

プロファイルガイド最適化、GCC -Fprofile -Generateを使用したアプリケーションをビルドします。

プロファイルデータを生成するための代表的なワークロードでアプリケーションを実行します。

プロファイルデータを使用してアプリケーションを再構築します。GCC-Fprofile -use。
  1. PGOを使用するという課題は、上記のステップ2で非常に高いパフォーマンスのオーバーヘッドです。 gcc -frofile -generateで構築されたアプリケーションの実行が遅いため、生産環境で動作するシステムで実行することは実用的ではない場合があります。 GCCマニュアルのプログラムインストゥルメンテーションオプションセクションを参照して、ランタイムインストゥルメンテーションを備えたアプリケーションと、生成されたプロファイル情報を使用して再構築するための最適化を制御するセクションオプションを参照してください。 GCCマニュアルで説明されているように、-fprofile-update = Atomicはマルチスレッドアプリケーションに推奨され、改善されたプロファイルデータを収集することでパフォーマンスを改善できます。

    PGOを使用する時期

    PGOを使用すると、GCCは、撮影されていない範囲の測定やループトリップカウントの測定などの追加情報を提供することにより、アプリケーションをより適切に最適化できます。 PGOは、パフォーマンスが向上するかどうかを試してみるための有用な最適化です。 PGOが役立つパフォーマンスシグネチャには、かなりの割合の支店誤差を含むアプリケーションが含まれます。これは、パフォーマンスを使用してCPUのパフォーマンス監視ユニット(PMU)Counter BR_MIS_PRED_RETIREDを読み取ることができます。多数の支店の誤解は、STALL_FRONTEND PMUカウンターで測定できるフロントエンドのストールの割合が高いことにつながります。 L2命令キャッシュミス率が高いアプリケーションは、おそらく誤って予測された支店に関連するPGOの恩恵を受ける可能性があります。要約すると、支店の予測、CPUフロントエンドのストール、L2命令キャッシュミスの大部分は、PGOがパフォーマンスを改善できるパフォーマンス署名です。

    MySQLデータベースGCC PGOケーススタディ

    MySQLは、世界で最も人気のあるオープンソースデータベースであり、MySQLバイナリサイズが大きいため、GCC PGOの最適化を使用するのに理想的な候補です。 PGO情報がなければ、GCCが実行された多くの異なるコードパスを正しく予測することは不可能です。 PGOを使用すると、ブランチの誤解が大幅に削減され、L2命令キャッシュミスレートとCPUフロントエンドストールがアンペアAltra Maxプロセッサを削減します。 GCC PGO:

    を使用してMySQLが最適化される方法を要約します

    sysbenchを使用して、mysqlパフォーマンスを評価しました
    1. GCC PGOは、MySQL MTR(MySQL-Test-Run)テストスイートを使用してトレーニングを受けました
    2. sysbenchのoltp_point_selectおよびoltp_read_onlyテストを使用して、デフォルトのビルドと比較してPGOビルドでパフォーマンスを測定しました
    3. 使用されるスレッドの数は1から1024まで変化し、OLTP_POINT_SELECTで平均速度29%、AMPERE ALTRA MAX M128-30プロセッサ
    4. 64スレッドを使用して、MySQLのスループットを改善することにより、PGOはパフォーマンスを32%改善しました
    5. 追加の詳細は、MySQLチューニングガイドのAmpere開発者のWebサイトにあります。
    6. 要約

    アプリケーションを最適化するには、何が最適かを判断するために、さまざまな戦略を実験する必要があります。このペーパーでは、さまざまなGCCコンパイラの最適化に関する推奨事項を提供して、Ampereプロセッサで実行されている高性能アプリケーションを生成します。 Ampere Cloudネイティブプロセッサでサポートされているすべての機能を活用するコードを生成する最も簡単な方法として、-MCPUオプションを使用することを強調します。 MySQLデータベースとVP9ビデオエンコーダーの2つのケーススタディでは、GCCオプションを使用して、パフォーマンスが重要なこれらのアプリケーションを最適化することを示しています。持続可能なクラウドコンピューティングのために構築されたAmpereの最初のクラウドネイティブプロセッサは、業界で前例のない予測可能な高性能、プラットフォームのスケーラビリティ、電力効率を提供します。開発者の取り組みについて詳しく知り、開発者でベストプラクティスを見つけて、amperecomputing.comでベストプラクティスを見つけて、community.amperecomputing.comで会話に参加してください。

以上がアンペアプロセッサ用のGCCガイドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート