インテル® Xeon Phi™ プロセッサーとインテル® AVX-512 ISA 向けのコンパイル

同カテゴリーの次の記事

インテル® Xeon Phi™ プロセッサーへのオフロード・オーバー・ファブリック: チュートリアル

この記事は、インテル® デベロッパー・ゾーンに公開されている「Compiling for the Intel® Xeon Phi™ Processor and the Intel® Advanced Vector Extensions 512 ISA」の日本語参考訳です。


この記事の PDF 版はこちらからご利用になれます。

はじめに

この記事では、インテル® アドバンスト・ベクトル・エクステンション 512 (インテル® AVX-512) の概要を説明し、インテル® コンパイラーを使用してインテル® Xeon Phi™ プロセッサー x200 製品ファミリー向けにアプリケーションをビルドするいくつかの方法を示します。

インテル® AVX-512 命令セット

インテル® AVX-512 命令は、包括的な機能とインテル® AVX やインテル® AVX2 命令セットよりも優れたパフォーマンスを提供します (詳細は、こちらの資料 (英語) のセクション 1.2 を参照してください)。インテル® AVX-512 命令セット・アーキテクチャー (ISA) は、次のグループで構成されています。

  • インテル® AVX-512 基本命令 (インテル® AVX-512F):
    インテル® AVX-512 のベースであり、EVEX エンコーディング・スキームでエンコードされた、512 ビットのベクトルレジスター (64 ビット・モードでは最大 32 ベクトルレジスター) と opmask レジスターを利用した条件処理をサポートする、インテル® AVX とインテル® AVX2 の SIMD 命令の拡張を含みます。
  • インテル® AVX-512 競合検出命令 (インテル® AVX-512CD):
    効率良い競合検出により、さらに多くのループをベクトル化できます。
  • インテル® AVX-512 指数および逆数命令 (インテル® AVX-512ER):
    特定の超越数学関数の計算を高速化するビルディング・ブロックを提供します。
  • インテル® AVX-512 プリフェッチ命令 (インテル® AVX-512PF):
    ギャザー/スキャッター命令に関連したメモリー操作のレイテンシーの軽減に役立つ新しい命令です。
  • インテル® AVX-512 バイト命令およびワード命令 (インテル® AVX-512BW):
    8 ビットと 16 ビットの整数演算を行うインテル® AVX-512 命令です。
  • インテル® AVX-512 ダブルワード命令およびクワッドワード命令 (インテル® AVX-512DQ):
    整数演算と浮動小数点演算を拡張する新しい 32 ビットと 64 ビットのインテル® AVX-512 命令です。
  • インテル® AVX-512 ベクトル長拡張命令 (インテル® AVX-512VL):
    ほとんどのインテル® AVX-512 命令が ZMM (512 ビット) レジスターだけでなく、XMM (128 ビット) と YMM (256 ビット) レジスターでも処理を行えるように拡張します。

インテル® Xeon Phi™ プロセッサー x200 製品ファミリー (開発コード名 Knights Landing) では、インテル® AVX-512F、インテル® AVX-512CD、インテル® AVX-512ER、インテル® AVX-512PF が実装されており、インテル® Xeon® プロセッサーでは、インテル® AVX-512F、インテル® AVX-512CD、インテル® AVX-512BW、インテル® AVX-512DQ、インテル® AVX-512VL が実装されます。

インテル® Xeon Phi™ プロセッサー x200 製品ファミリー向けにコンパイルする

インテル® AVX-512F とインテル® AVX-512CD は、インテル® Xeon Phi プロセッサー x200 製品ファミリーとインテル® Xeon® プロセッサーに共通の命令グループです。インテル® AVX-512ER とインテル® AVX-512PF は、インテル® Xeon Phi™ プロセッサー x200 製品ファミリーにのみ実装されています。そして、インテル® AVX-512BW、インテル® AVX-512DQ、インテル® AVX-512VL は、インテル® Xeon® プロセッサーにのみ実装されています。

次のインテル® コンパイラー・オプションを使用して、インテル® AVX-512 向けのコードを生成する実行ファイルをビルドできます。

  • -x<code> コンパイラー・オプション

    一般的な形式は、-x<code> (Linux*) または /Qx<code> (Windows®) です。ここで、<code> は引数を表します。このオプションは、ターゲットとするプロセッサー機能を指定します。インテル® AVX-512 命令をターゲットにするには、生成するグループに応じて次の 3 つの引数のいずれかを指定します。

    -xCOMMON-AVX512: インテル® AVX-512F およびインテル® AVX-512CD 命令を生成します。

    -xMIC-AVX512: インテル® AVX-512F、インテル® AVX-512CD、インテル® AVX-512ER、およびインテル® AVX-512FP 命令を生成します。

    -xCORE-AVX512: インテル® AVX-512F、インテル® AVX-512CD、インテル® AVX-512BW、インテル® AVX-512DQ、およびインテル® AVX-512VL 命令を生成します。

    例えば、インテル® Xeon Phi™ プロセッサー x200 製品ファミリー向けにインテル® AVX-512 命令を生成するには、-xMIC-AVX512 オプションを使用します。Linux* システムでは、次のように指定します。

    $ icc -xMIC-AVX512 application.c

    このコンパイラー・オプションは、インテル® Xeon Phi™ プロセッサー x200 製品ファミリー向けに大きなバイナリーをビルドする際に役立ちます。コプロセッサー上でビルドすると時間がかかるため、代わりにインテル® Xeon® プロセッサー・ベースのマシンでビルドすることができます。

  • -ax<code> コンパイラー・オプション

    一般的な形式は、-ax<code> (Linux*) または /Qax<code> (Windows®) です。ここで、<code> は引数を表します。このオプションは、インテル® プロセッサー向けの複数の機能固有の自動ディスパッチ・コードパスとベースライン・コードパス (汎用 IA コードパス) を生成します。ベースライン・コードパスは、ハードウェア・プラットフォームで特定の ISA がサポートされていない場合に使用されます。通常、ベースライン・コードパスはインテル® ストリーミング SIMD 拡張命令 2 (インテル® SSE2) 命令セットで構成されます。生成するインテル® AVX-512 命令のグループに応じて次の 3 つの引数のいずれかを指定します。

    -axCOMMON-AVX512: インテル® AVX-512F およびインテル® AVX-512CD 命令を生成します。ベースライン・コードパスも生成します。

    -axMIC-AVX512: インテル® AVX-512F、インテル® AVX-512CD、インテル® AVX-512ER、およびインテル® AVX-512FP 命令を生成します。ベースライン・コードパスも生成します。

    -axCORE-AVX512: インテル® AVX-512F、インテル® AVX-512CD、インテル® AVX-512BW、インテル® AVX-512DQ、およびインテル® AVX-512VL 命令を生成します。ベースライン・コードパスも生成します。

    このコンパイラー・オプションは、複数のプラットフォームで実行可能なバイナリーをビルドする際に便利です。-x<code> と -ax<code> と組み合わせて、ベースライン・コードパスで生成される命令セットを変更することもできます。例えば、-axMIC-AVX512 –xCOMMON-AVX512 を指定するとインテル® AVX-512 専用コードとして、ベースラインに COMMON-AVX512 を使用した機能固有の MIC-AVX512 を自動ディスパッチ可能なバイナリーを作成できます。

  • -xHost コンパイラー・オプション

    一般的な形式は、-xHost (Linux*) または /QxHost (Windows®) です。このオプションは、コンパイルを行うホスト・プロセッサー上で利用可能な最上位の命令セット向けのコードを生成します。

    例えば、インテル® Xeon® プロセッサー v3 ファミリーベースの Linux* システムでは、次のコマンドを実行すると、インテル® AVX2 ISA 向けのコードが生成されます。

    $ icc -xHost application.c

    一方、同じコマンドをインテル® Xeon Phi™ プロセッサー x200 製品ファミリーベースのシステムで実行すると、そのアーキテクチャーでサポートされているインテル® AVX-512 ISA 向けのコードが生成されます (-xMIC-AVX512 を指定した場合と同じです)。

    このコマンドをインテル® AVX-512 をサポートするインテル® Xeon® プロセッサーで実行すると、そのアーキテクチャーでサポートされているインテル® AVX-512 ISA 向けのコードが生成されます (-xCORE-AVX512 を指定した場合と同じです)。

上記のすべてのオプションは、インテル® Xeon Phi™ コプロセッサー x100 製品ファミリーでは利用できません。

インテル® Software Development Emulator を使用して実行ファイルをテストする

インテル® Software Development Emulator (インテル® SDE) を使用して、インテル® Xeon Phi™ プロセッサー x200 製品ファミリー向けの実行ファイルをテストすることができます。インテル® SDE は、ソフトウェア・エミュレーターです。将来の命令のエミュレートを目的としており、パフォーマンスは考慮していません。インテル® Xeon Phi™ プロセッサー x200 製品ファミリー向けにインテル® SDE を実行する方法については、こちらの記事 (英語) で詳しく紹介されています。 

まとめ

この記事では、インテル® AVX-512 命令の異なるグループの概要を説明し、インテル® Xeon Phi™ プロセッサー x200 製品ファミリー向けにインテル® AVX-512 ISA の利点を活用する実行ファイルをビルドするための、インテル® コンパイラーのオプションを紹介しました。

参考文献

コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。

関連記事