インテル® MIC アーキテクチャーに適したアプリケーション解析

同カテゴリーの次の記事

インテル® コンパイラーの基本的な使用方法

この記事は、インテル® デベロッパー・ゾーンに掲載されている「Application Analysis for Intel® MIC Architecture Suitability」の日本語参考訳です。


インテル® MIC アーキテクチャー向けのコンパイラー手法

インテル® MIC アーキテクチャーに適したアプリケーション解析

インテル® メニー・インテグレーテッド・コア (インテル® MIC) アーキテクチャー製品ファミリーは、高度な並列アプリケーションまたはアプリケーション内の高度な並列カーネルのパフォーマンスを引き出すために最適化されています。インテル® Xeon Phi™ コプロセッサーは、この製品ファミリーの 1 つです。

はじめに

この記事では、インテル® Xeon Phi™ コプロセッサーのように、高度に並列化およびベクトル化されたアーキテクチャー上での実行に適したアプリケーションの特性を説明します。

アプリケーションに最適なアーキテクチャーの特定

プロセッサーの速度に依存している多くのアプリケーションは、コーディング手法や経験則を根本的に変えなければパフォーマンスを向上することが困難になっています。インテル® Xeon® プロセッサーおよびインテル® コンパイラーは、さまざまな分野のアプリケーションのパフォーマンスを大幅に向上できるように、数年にわたって進化し続けてきました。では、すべてのアプリケーションをインテル® MIC アーキテクチャーで適切に実行できるのでしょうか?再コンパイルするだけでよいのでしょうか? 必ずしもそうとは言えません。すべてのアプリケーションがインテル® Xeon Phi™ コプロセッサーで最適なパフォーマンスを引き出せるとは限りません。一部のアプリケーションでは、コードを多少変更するか、もしくは全く変更することなく、新しいコンパイラー・オプションを追加してコンパイルするだけで、インテル® MIC アーキテクチャーで優れたパフォーマンスを得ることができます。その他のアプリケーションでは、コードにコンパイラーのプラグマや指示句を追加して、インテル® MIC アーキテクチャー向けに設計されたコンパイラー・オプションを使用する、といった作業が必要になります。また、特定のアプリケーションで最適なパフォーマンスを実現するには、構造体配列 (AoS) から配列構造体 (SoA) への変更、過度なポインター追跡の削除、データ構造のアライメントのように、アルゴリズムやコードの変更が必要になります。もちろん、コードやオプションを変更することなく、インテル® Xeon® プロセッサーのような汎用プロセッサーで最適なパフォーマンスが得られるアプリケーションもあります。

アプリケーションをインテル® Xeon Phi™ コプロセッサーに移植する前に、まずそのアプリケーションのプロセッサー特性を調べて、インテル® Xeon Phi™ コプロセッサーで効率良く実行できるかどうかを確認してください。ほとんどのアプリケーションはインテル® Xeon Phi™ コプロセッサーで動作するように移植できますが、アプリケーションを高速かつ効率良く実行するには、そのアプリケーションが高度に並列化および高度にベクトル化されている特性を持っている必要があります。インテル® コンパイラーは初期の状態でアプリケーションのパフォーマンスが最適になるように支援しますが、ユーザーが何もしなくてもパフォーマンスの低い元のコードをインテル® Xeon Phi™ コプロセッサー向けのパフォーマンスの高いコードに変換できる魔法のツールではありません。まず、次の質問の回答を考えてみてください。

「汎用プロセッサー・ベースのホストで実行した現在の状態でもアプリケーションは高度に並列化および高度にベクトル化されているか?」

答えが「いいえ」または「よく分からない」のいずれかであれば、次の質問に進んでください。

「インテル® MIC アーキテクチャーに移植する前に、アプリケーションをより並列化およびベクトル化したほうが良いか?」

さらに

「インテル® MIC アーキテクチャーでアプリケーションを適切に実行させるには、どのくらいの労力が必要なのか?」

ほとんどのアプリケーションは、事前の再試験、パフォーマンス解析、チューニングにより恩恵を得られます。このプロセスで行われた変更は、インテル® Xeon® プロセッサーおよびインテル® Xeon Phi™ コプロセッサーの両方でアプリケーションのパフォーマンス向上に役立ちます。この解析の最後に、アプリケーションがインテル® MIC アーキテクチャーでの実行に適しているかどうかを判断します。アプリケーションによっては、インテル® Xeon® プロセッサーのような汎用プロセッサーでパフォーマンスが最適になることが判明する場合もあります。いずれの場合も、インテルではアプリケーションのパフォーマンスを最適にするソリューションを提供しています。

事前の作業: アプリケーションに最適なターゲット・プラットフォームの特定

次のステップは、最初の状態でホスト・プロセッサー・システムで実行したときの並列化とベクトル化の効果を判断することです。インテル® Xeon® プロセッサーとインテル® Xeon Phi™ コプロセッサーのアーキテクチャー上の違いについては、この記事をお読みください。

アプリケーションは高度に並列化されているか?

この質問には、ためらうことなく「はい」と答えられる方が多いでしょう。アプリケーションで、OpenMP*、インテル® スレッディング・ビルディング・ブロック (インテル® TBB)、インテル® Cilk™ Plus の spawn/sync、そして、インテル® コンパイラーの自動並列化のようなスレッドによる並列処理を行っている場合、サーバーの最大物理コア数 (8 コア以上) までほぼ線形にスケーリングすることを確認してください。ほぼ線形にスケーリングする場合は、次の質問をスキップして先に進んでください。アプリケーションで MPI* を使用していて良好にスケーリングしている場合も、次の質問をスキップして先に進んでください。

アプリケーションが並列化されていない、または適切にスケーリングしていない場合、ここでストップして、インテル® MIC アーキテクチャーに移行する前に、並列化の作業を行ってください。高度に並列化されていないアプリケーションを、高度な並列アーキテクチャーで適切に動作させることはできません。まずは、アプリケーションの並列化とスケーラビリティーを向上させる作業を行います。作業に役立つ情報を以下に紹介します。

アプリケーションはベクトル化されているか?

ベクトル化は、インテル® アーキテクチャー・プラットフォームによってサポートされるデータ並列性 (SIMD) の形式です。ベクトル化は、最適化レベル -O2 コンパイラー・オプション以上ではデフォルトで有効です。-x[arch] および -ax[arch] コンパイラー・オプションは、インテル® Xeon® プロセッサーのベクトル化を制御します。ベクトル化を無効にするには、”-no-vec -no-simd” コンパイラー・オプションを使用します。-no-vec オプションは、配列表記文のベクトル化を含む、すべての自動ベクトル化を無効にします。-no-simd オプションは、SIMD プラグマを含むループのベクトル化を無効にします。

最初のステップとして、ホストサーバーで、-O2 または -O3 オプションでアプリケーションをビルドしたときに使用したすべてのオプションに加えて、-xhost (または適切な -x オプション) を追加してアプリケーションをコンパイルします。そして、アプリケーションのシリアル (1 プロセス、1 スレッド) バージョンを実行します。次に、-xhost (または -x[arch] オプション) を削除して、-no-vec -no-simd オプションを追加します。その後、インテル® Xeon® プロセッサーのホストで 1 プロセス、1 スレッドのアプリケーションを再度実行します。ベクトル化したケースとベクトル化していないケースの実行時間を比較してください。ベクトル化でアプリケーションのパフォーマンスは向上しましたか?大幅にスピードアップした場合、アプリケーションはベクトル化の利点を活用しています。そうでない場合も心配することはありません。ほかにもベクトル化する方法はあります。

別のテストは、-O2 オプション以上のビルドに -xhost オプションまたは -x[arch] オプションを追加し、さらに -vec-report3 オプションを追加することです。-vec-report3 により生成されたレポートにクリティカル・ループのベクトル化は表示されていますか?表示されている場合、コンパイラーはコードを自動ベクトル化できます。この記事では、アプリケーションを適切にベクトル化するさまざまな情報を紹介しています。

ベクトル化に慣れていない場合は、次の Web セミナーとツールキットのリンクをクリックして、ベクトル化の概念を理解することから始めてください。

まとめ

この記事では、インテル® Xeon Phi™ コプロセッサーのように、高度に並列化およびベクトル化されたアーキテクチャー上での実行に適したアプリケーションの特性を説明しました。 インテル® MIC アーキテクチャーに適しているアプリケーションは、高度に並列化およびベクトル化できます。アプリケーションにこれら両方の特性が含まれていなければ、そのアプリケーションはインテル® MIC アーキテクチャーでは適切に動作しません。この場合、インテル® MIC アーキテクチャーに移行する前に、並列化の作業を行う必要があります。

次のステップ

この記事は、「Programming and Compiling for インテル® Many Integrated Core アーキテクチャー」(英語) の一部「Application Analysis for Intel® MIC Architecture Suitability」の翻訳です。インテル® Xeon Phi™ コプロセッサー上にアプリケーションを移植し、チューニングを行うには、各リンクのトピックを参照してください。アプリケーションのパフォーマンスを最大限に引き出すために必要なステップを紹介しています。

インテル® メニー・インテグレーテッド・コア アーキテクチャーに対する準備に戻る

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

関連記事