チュートリアルのこのステージでは、ソースコードを編集し、アプリケーションを再コンパイルして、メインメモリーのアクセスのボトルネックを解決します。
このチュートリアルでは、インテル® oneAPI ベース・ツールキットの一部としてインストールされるインテル® oneAPI DPC++/C++ コンパイラーを使用します。結果とワークフローは、使用するコンパイラーによって異なる場合があります。
チュートリアルのこのステージでは、コンパイラーの最適化レベルを 「最大最適化 (スピード優先) (/O2)」 ではなく 「最大最適化 (サイズ優先) (/O1)」 に設定します。
スピードを優先する最大限の最適化を有効にしてパフォーマンス・プロファイルを行うことは理にかなっています。ここではこれを基に、インテル® VTune™ プロファイラーがコンパイラー・オプションによる不明瞭な動作に関連する問題の検出にどのように役立つかを説明します。インテル® oneAPI DPC++/C++ コンパイラーでは、/O1 オプションは自動ベクトル化を無効にします。
このような問題は、実際の大規模プロジェクトで発生する可能性があり、その理由は、タイプミスのような単純なものから、特定のコンパイラー・ オプションがパフォーマンスにどのように影響するか認識が不足しているなど、より複雑なものまで多岐にわたります。
例えば、 gcc などの一部のコンパイラーは、 -ftree-vectorize オプションが指定されない限り、 -O2 レベルでベクトル化を試行せず、 -O3 レベルでのみ自動ベクトル化を行います。
インテル® oneAPI DPC++/C++ コンパイラーを使用して Microsoft Visual Studio* でコードを編集および再コンパイルするには、次の手順に従います。
マシン上の matrix サンプル・アプリケーションのフォルダーを見つけます。デフォルトは以下です。
[Documents]\VTune\samples\matrix
‘..\matrix\vc15’ フォルダーにある ‘matrix.sln’ Visual Studio* ソリューションを開きます。
リリース構成と x64 プラットフォームを有効にしてアプリケーションをビルドしていることを確認してください。
[ソリューション エクスプローラー] ペインで、matrix プロジェクトを右クリックし、[プロパティ] を選択します。
[プロパティー] ウィンドウが開きます。
[構成プロパティ] -> [全般] で、[プラットフォーム・ツールセット] を [Intel C++ Compiler <version>] に変更します。
[C/C++] -> [全般] メニューで、[デバッグ情報の形式] が [プログラム データベース (/Zi)] に設定されていることを確認します。
[C/C++] > [最適化] メニューで、[最適化] オプションを [最大最適化 (速度優先) (/O1)] に設定します。
[C/C++] > [診断 [Intel C++]] > [最適化診断レベル] > [レベル 2 (/Qopt-report:2)] に設定します。
multiply.h ヘッダーファイルの 36 行目を変更します。
#define MULTIPLY multiply1
変更後:
#define MULTIPLY multiply2
これにより、プログラムは multiply.c ソースファイルの multiply2 関数を使用するように変更され、メモリーアクセスの問題を解決するループ変換テクニックが適用されます。
プロジェクトをビルドします。
次のステップ: 最適化後のパフォーマンスを解決します。