インテル® コンパイラーの最適化オプションから見る次世代 CPU

その他

さまざまな PC 系記事サイトで今後登場する CPU (Cannonlake、Icelake、などなど) の新機能が取り上げられていますが、発表前のプロセッサーであるため噂の域を出ません…

しかし、サポートされる命令セットに関しては明らかに知ることができます。インテル® C++/Fortran コンパイラーは発表前のプロセッサーに対する最適化オプションを提供しています。

コンパイラーの help オプションで確認できます。Windows* 版の C++ コンパイラーの場合、icl /help でヘルプを出力できます。


図 1 ヘルプの命令セットオプション

インテル® コンパイラーには xax という最適化オプションがあり、生成する命令セットや対象のプロセッサーを指定します。例えば、/QxAVX2 であればインテル® AVX2 命令セットを使用するなど。

ここで図 1 のプロセッサー開発コード名に注目してください。CANNONALAKE、ICELAKE-CLEINT、ICELAKE-SERVER などまだ発表前のプロセッサーがリストされています。では、実際にコードを生成してみましょう。ここでは、サンプルとして入手が容易な PI を求めるソースを使用します。

まず、インテル® AVX2 で命令を生成して実行できるか確認して見ましょう。ここで使用するプロセッサーは、インテル® Core™ i7-9700K プロセッサーです。

では、次に CANNONLAKE 向けにコードを生成して実行してみます。

コンパイルはできましたが、インテル® Core™ i7-9700K プロセッサーはインテル® AVX-512 をサポートしないため実行できません。インテル® コンパイラーの x (/Qx) オプションを使用すると、ランタイムのプロセッサー・チェックルーチンが埋め込まれ、どの命令が使用できないかメッセージが表示されます。ここで CANNOLAKE は、AVX512DQ、AVX512F、AVX512IFMA52、AVX512CD、AVX512BW、AVX512VL、AVX512VBMI 命令を実行できますが、実行環境のプロセッサーではサポートされていないことが分かります。

ここからCANNONLAKE がインテル® AVX-512 命令をサポートし、その中には発表済みの CASCADELAKE には含まれていない命令セットがあることが分かります。CASCADELAKE を確認してみましょう。

CASCADELAKE には、AVX512IFMA52 と AVX512VBMI が含まれていません。

では、本命 Sunny Cove アーキテクチャーが採用されるという ICELAKE で確認してみましょう。インテル® コンパイラーのバージョン 19.0 では、ICELAKE-CLIENT と ICELAKE-SERVER にオプションが分けられました (以前は ICELAKE のみ)。これは、将来サポートされる命令セットが拡張されることを意味していると思われます。ICELAKE-CLENT で命令を生成してみます。

おお。CANNONLAKE に加えていくつかの命令セットが追加されています。つまりこれが ICELAKE のクライアント・プロセッサーでサポートされる命令であることが分かります。

ICELAKE-CLIENT では、サイトでは検索できないいくつかの命令が追加されています (RDPID、GFNI、VAES などなど)。命令の名称から機能が想像できるものもありますが、実際はどうなのでしょう?

そう、生成された命令を確認すればいいのです、コンパイラーにはアセンブリー命令を出力するオプション (/S/Fa) が用意されています。アセンブリーを出力して見慣れない命令セットを探し出すことができます。しかし、これはそれほど容易ではありません、まずその命令セットが適用されるソースコードを準備する必要があります。残念ながら、サンプルの PI では、これらの命令セットは生成されません。

インテル® コンパイラーを使用するとこんな遊びができます。
みなさんもお試しあれ。

1 日も早くクライアント環境でインテル® AVX-512 が使える日が来ますように…

注意: プロセッサーの発表時にサポートされる命令セットは、メッセージで表示されるものと異なる可能性があります。

厳密には、『Intel® Architecture Instruction Set Extensions and Future Features Programming Reference』 (英語) というマニュアルで、今後リリース予定の命令セットが公開されています。また、プロセッサー・エミュレーターを使用して将来のプロセッサーでサポートされる命令セットをエミュレートして実行することができます。

詳しくは、https://software.intel.com/en-us/forums/intel-isa-extensions をご覧ください。

タイトルとURLをコピーしました