インテル VTune Amplifier Windows 環境向けスタートガイド エクセルソフト株式会社 Version 1.0.0-20180829
目次 1. インテル VTune Amplifier の使用.......................................................... 1 2. インテル VTune Amplifier の基本.......................................................... 1 3. サンプルプログラムを使用したチュートリアル.................................................. 2 3.1. プログラムのビルド...................................................................... 3 3.2. インテル VTune Amplifier の起動...................................................... 5 Visual Studio 統合環境から GUI を起動する................................................. 5 スタンドアロンの GUI を起動する........................................................... 6 3.3. データ収集の開始....................................................................... 9 3.4. ホットスポットの特定................................................................... 10 実行状況を大まかに把握する.............................................................. 10 より詳細な情報を確認する................................................................ 12 3.5. コードの変更と性能向上の確認.......................................................... 15 4. まとめ..................................................................................... 19 5. より高度な機能を使用するために............................................................. 19 6. ドキュメント............................................................................... 19 7. 免責事項.................................................................................. 19
インテル VTune Amplifier - Windows 環境向けスタートガイド 1. インテル VTune Amplifier の使用 1. インテル VTune Amplifier の使用 インテル VTune Amplifier はインテル プロセッサーへの最適化に特化したパフォーマンス プロファイラーです インテル VTune Amplifier を使用することで システム全体や アプリケーションのボトルネックを素早く発見することができます スレッドの効率やメモリーの帯域幅 キャッシュメモリーの利用率など 性能向上にかかわる豊富な情報を収集して 効果的な最適化を支援します このドキュメントでは インテル VTune Amplifier の概要と 製品に含まれるサンプルプログラムを使用して 以下の基本的な使用方法を説明します インテル VTune Amplifier の起動方法 プロジェクトの作成 設定方法 解析結果の表示と 解析画面の見方 ソースコードに掘り下げて解析結果を確認する方法 このドキュメントを進めていくためには すでにインテル VTune Amplifier がインストールされている環境が必要です 2. インテル VTune Amplifier の基本 インテル VTune Amplifier を最大限に活用するためには 前提としてインテル プロセッサーを搭載したシステムが対象です プロセッサーに関する詳細な情報は プロセッサー内部に搭載されているパフォーマンス モニタリング ユニット (PMU) からサンプリング ドライバーを使用して取得します PMU から情報を取得できない環境でも 基本的な性能情報はインテル VTune Amplifier から割り込みをかけて取得することができます また インテル VTune Amplifier は Java C/C++ Fortran.NET Go Python 言語に対応しており多くのアプリケーションの解析に使用できます Copyright 2015-2018 XLsoft Corporation. All Rights Reserved. 1 / 19
インテル VTune Amplifier - Windows 環境向けスタートガイド 3. サンプルプログラムを使用したチュートリアル 3. サンプルプログラムを使用したチュートリアル このドキュメントでは C++ 言語で記述された tachyon_vtune_amp_xe の find_hotspots を使用します インテル VTune Amplifier をインストールすると サンプルプログラムもあわせてインストールされるため 別途ダウンロードする必要はありません find_hotspots は効率の悪い処理を実行している箇所がボトルネックとなり 性能が著しく低下しています インテル VTune Amplifier で解析を行い 効率の悪い処理を発見して効果的な処理に置き換えます このガイドでは下記の環境で実行しています 環境により解析から得られるプログラムの性能特性が変化する可能性があります インテル Core i7-7800x プロセッサー 32GB メモリー Microsoft Visual Studio* 2017 バージョン 15.8.1 ( 以下 Visual Studio) Windows 10 Pro 64bit ( バージョン 1803) インテル VTune Amplifier 2018 Update3 Copyright 2015-2018 XLsoft Corporation. All Rights Reserved. 2 / 19
インテル VTune Amplifier - Windows 環境向けスタートガイド 3.1. プログラムのビルド 3.1. プログラムのビルド 1. tachyon_vtune_amp_xe の配置先にアクセスして 対象のファイルを任意の場所に展開します ここではデスクトップに展開します サンプルプログラムの配置先 C:\Program Files (x86)\intelswtools\vtune Amplifier\samples\en\C++\tachyon_vtune_amp_xe.zip 画像 1. tachyon_vtune_amp_xe の展開 2. tachyon_vtune_amp_xe フォルダ以下の tachyon_vtune_amp_xe.sln ファイルをダブルクリックします サンプルプログラムには Visual Studio 向けに tachyon_vtune_amp_xe.sln ファイルが各 vc フォルダに配置されています C:\< デスクトップ >\tachyon_vtune_amp_xe\tachyon\vc14\tachyon_vtune_amp_xe.sln 画像 2. tachyon_vtune_amp_xe.sln を開きます 3. 上部メニューから [ ビルド ] > [ ソリューションのビルド ] を選択してビルドを行い 実行ファイルを作成します 画像 3. Visual Studio からビルド 4. ビルドしたサンプルプログラムを [ デバッグ ] > [ デバッグなしで開始 ] から実行して プログラムの実行時間を確認します Copyright 2015-2018 XLsoft Corporation. All Rights Reserved. 3 / 19
インテル VTune Amplifier - Windows 環境向けスタートガイド 3.1. プログラムのビルド 画像 4. デバッグなしで実行 画像 5. find_hotspots.exe の実行 描画処理を完了後 タイトルバーに実行に要した時間が表示されます ここでは 約 10 秒ほどの時間をかけて描画を行ったことが確認できます 10.656 秒の時間をベースラインとして 高速化できる余地があるかどうか インテル VTune Amplifier を使用して性能解析を実行します Copyright 2015-2018 XLsoft Corporation. All Rights Reserved. 4 / 19
インテル VTune Amplifier - Windows 環境向けスタートガイド 3.2. インテル VTune Amplifier の起動 3.2. インテル VTune Amplifier の起動 これまでの手続きにより サンプルプログラムの描画時間を取得しました インテル VTune Amplifier で性能解析を行い 実行時間を改善するために必要な情報を入手します インテル VTune Amplifier は Visual Studio 環境から もしくはスタンドアロンの GUI を使用して操作します Visual Studio 統合環境から GUI を起動するもしくはスタンドアロンの GUI を起動するのいずれかを操作して インテル VTune Amplifier を起動します Visual Studio 統合環境から GUI を起動する 上部メニューから のアイコンをクリックして インテル VTune Amplifier を起動します 画像 6. Visual Studio 上部メニュー クリックすると Visual Studio 上でインテル VTune Amplifier が起動して [New Amplifier Result] タブが立ち上がります 画像 7. Visual Studio 上のインテル VTune Amplifier Copyright 2015-2018 XLsoft Corporation. All Rights Reserved. 5 / 19
インテル VTune Amplifier - Windows 環境向けスタートガイド 3.2. インテル VTune Amplifier の起動 スタンドアロンの GUI を起動する スタートメニューを開き VTune Amplifier < バージョン > をクリックする もしくはコマンドプロンプトを開き amplxe-vars.bat を実行後 amplxe-gui コマンドを実行します デフォルトのインストール先では amplxe-vars.bat ファイルは下記に配置されています C:\Program Files (x86)\intelswtools\vtune Amplifier\amplxe-vars.bat 画像 8. スタンドアロンの GUI を開始 スタンドアロン環境では インテル VTune Amplifier が管理するプロジェクトを作成します 解析対象ごとに一つのプロジェクトを作成して管理します サンプルプログラムの tachyon を解析するために新規プロジェクトを作成しましょう 1. をクリックして Create a Project ウィンドウを開き Project name に任意のプロジェクト名を入力します ここでは tachyon-sample とします Copyright 2015-2018 XLsoft Corporation. All Rights Reserved. 6 / 19
インテル VTune Amplifier - Windows 環境向けスタートガイド 3.2. インテル VTune Amplifier の起動 画像 9. Create a Project ウィンドウ 2. Create Project ボタンをクリックします 続けて Analysis Target タブが開き 解析対象となるアプリケーションやシステムなどの設定を行います 画像 10. Analysis Target タブ 3. ターゲットアプリケーションと作業ディレクトリを設定します をクリックして Application: と Working directory: に それぞれサンプルプログラムの実行ファイルと作業フォルダを指定します Application:* C:\Users\xlsoftkk\Desktop\tachyon\vc14\find_hotspots_Win32_Release\find_hotsp ots.exe Copyright 2015-2018 XLsoft Corporation. All Rights Reserved. 7 / 19
インテル VTune Amplifier - Windows 環境向けスタートガイド 3.2. インテル VTune Amplifier の起動 Working directory: C:\Users\xlsoftkk\Desktop\tachyon\vc14 画像 11. プロジェクト設定済みの状態 4. Choose Analysis をクリックして 解析タイプの設定に移ります Copyright 2015-2018 XLsoft Corporation. All Rights Reserved. 8 / 19
インテル VTune Amplifier - Windows 環境向けスタートガイド 3.3. データ収集の開始 3.3. データ収集の開始 ここまでの手続きにより インテル VTune Amplifier でサンプルプログラムが解析できる状態になりました 解析タイプを指定して 実際にインテル VTune Amplifier で解析を実行します このドキュメントでは 解析タイプに Basic Hotspots を選択します Basic Hotspots は一番時間を消費している関数 ( ホットスポット ) を発見する基本的な解析タイプです Basic Hotspots 以外にも 様々な解析タイプがあり それぞれ必要に応じて複数の解析タイプを実行することが可能です 得られた結果は記録され結果ファイルとして保存します 1. 解析タイプに Basic Hotspots を選択して Start ボタンをクリックします 画像 12. 解析の開始 2. プログラムが実行され インテル VTune Amlifier が自動的にデータ収集を開始します プログラムの実行が終了して解析結果が表示されるまで待機します 画像 13. インテル VTune Amplifier による tachyon の解析 Copyright 2015-2018 XLsoft Corporation. All Rights Reserved. 9 / 19
インテル VTune Amplifier - Windows 環境向けスタートガイド 3.4. ホットスポットの特定 3.4. ホットスポットの特定 インテル VTune Amplifier の解析結果は 複数の画面を参照しつつ 用途に応じて異なる視点から解析情報を提供します Basic Hotspots 解析では下記の 5 つの画面に解析情報が表示されます 使用した解析タイプにより表示される内容は異なります ここでは Summary と Bottom-up に注目します Summary Bottom-up Coller/Collee Top-down Tree Platform 実行状況を大まかに把握する 解析結果を開くと Summary 画面が最初に表示されます Summary 画面では アプリケーションの実行時間や ホットスポット CPU 使用率のヒストグラムから アプリケーションの実行状況をおおまかに把握することができます 画像 14. Summary 画面 Elapsed Time にはアプリケーションの実行から終了までに要した時間が表示されます サンプルプログラムでは 描画後に待機時間が設けられているため プログラムのビルドでベースタイムに設定した時間よりも長くなっていることに注意してください Top Hotspots はアプリケーション中に実行された関数の中から 最も多くの CPU 時間を消費した関数をランキング形式で表示します CPU 時間は CPU が実際にプログラムを実行した時間を計上します ここでは CPU 時間が一番かかっている関数は render_one_pixel 関数だと表示されています さらに Effective CPU Utilization Histogram を見ると サンプルプログラム内部の処理のほとんどは 複数のスレッドを利用して並列に処理されていません Copyright 2015-2018 XLsoft Corporation. All Rights Reserved. 10 / 19
インテル VTune Amplifier - Windows 環境向けスタートガイド 3.4. ホットスポットの特定 Summary 画面から下記の情報を取得できます プログラム全体の実行時間は約 19 秒 実行時間中の CPU 時間は約 14.5 秒 ホットスポットは render_one_pixel 関数 3 つのスレッドが動作している プログラム中の多くの処理は 1 スレッドで動作しており並列に実行されていない ここでは ホットスポット関数として表示されている render_one_pixel 関数に注目するため より詳細な情報が得られる Bottom-up 画面に移動します 画像 15. Bottom-up 画面に移動 Copyright 2015-2018 XLsoft Corporation. All Rights Reserved. 11 / 19
インテル VTune Amplifier - Windows 環境向けスタートガイド 3.4. ホットスポットの特定 より詳細な情報を確認する Bottom-up 画面はBottom-up タイムライン コールスタックの3つのペインで構成されています ここでは Bottom-up とタイムラインの情報に注目します Bottom-up : 実行された関数やループ モジュールごとに対応した性能情報を表示します タイムライン : 解析開始から終了までに実行されたスレッド数とスレッドの状態を時系列で表示します コールスタック : Bottom-up で選択したオブジェクトのコールスタックを表示します 画像 16. Bottom-up 画面 Bottom-up を見ると CPU Time の項目で降順にソートされており Summary 画面で確認した情報と同じく render_one_pixel 関数が一番 CPU 時間を消費していることが確認できます render_one_pixel 関数は 解析対象のプログラム find_hotspots.exe に含まれるユーザー関数です render_one_pixel 関数の実行状況をより詳しく把握するために フィルタリング機能を使用して注目しましょう Bottom-up に表示されている render_one_pixel を右クリックして 表示されるメニューから Filter In by Selection を選択します 画像 17. render_one_pixel でフィルタリング Copyright 2015-2018 XLsoft Corporation. All Rights Reserved. 12 / 19
インテル VTune Amplifier - Windows 環境向けスタートガイド 3.4. ホットスポットの特定 タイムラインから対象の関数が実行されたタイミングや スレッドの動作状況を確認できます タイムラインに表示される茶色の領域は CPU 時間に対応しています 画像 18. フィルタリング結果 タイムラインから render_one_pixel 関数は CPU のリソースを効果的に使用できていない状態が確認できます カーソルをタイムラインに重ねると数値情報を得られます 画像 19. CPU 利用率は低い フィルター機能は をクリックして解除できます ソースコード行のレベルに掘り下げて解析結果を確認します render_one_pixel をダブルクリックしてコードビューに移動します Bottom-up 画面には 関数に対応したソースファイルが項目に表示されます render_one_pixel 関数は find_hotspots.cpp に記述されています 画像 20. render_one_pixel のコードビューに移動 Copyright 2015-2018 XLsoft Corporation. All Rights Reserved. 13 / 19
インテル VTune Amplifier - Windows 環境向けスタートガイド 3.4. ホットスポットの特定 コードビューでは 対応した関数をコードレベルで確認できます ここでは find_hotspots.cpp ファイルが開かれ render_one_pixel 関数のコードがハイライトされます コードに対応した性能情報が表示されており 注目するべきは render_one_pixel 関数が消費している CPU 時間の 98% が 関数内部でコールしている initialize_2d_buffer 関数によって発生していることです 画像 21. find_hotspots.cpp のコードビュー initialize_2d_buffer 関数は コンパイラーのインライン展開などの理由により 関数情報としてインテル VTune Amplifier に表示されていません Visual Studio のテキストエディターから initialize_2d_buffer の処理を確認します コードビューのいずれかのコード領域をダブルクリックして Visual Studio に移動します Bottom-up 画面とコードビューから下記の情報を取得しました render_one_pixel 関数は find_hotspots.exe のユーザー関数 render_one_pixel 関数は一番 CPU 時間を消費して動作しているが CPU 利用率が悪い render_one_pixel の CPU 時間のほとんどは 内部でコールしている initialize_2d_buffer 関数が消費している Copyright 2015-2018 XLsoft Corporation. All Rights Reserved. 14 / 19
インテル VTune Amplifier - Windows 環境向けスタートガイド 3.5. コードの変更と性能向上の確認 3.5. コードの変更と性能向上の確認 いままでの手続きにより render_one_pixel 関数でコールされている initialize_2d_buffer 関数が多くの時間を消費していることが確認できました initialize_2d_buffer 関数の実装を変更して性能向上を図ります 1. render_one_pixel 関数でコールされている initialize_2d_buffer 関数 (find_hotspots.cpp : 133 行目 ) を右クリックします 2. [ 定義へ移動 ] をクリックします 画像 22. initialize_2d_buffer の定義に移動 3. initialize_2d_buffer 関数の定義に移動して内部実装を下記のように変更します 78 行目の末尾にある / を削除 91 行目の末尾に / を追加 initialize_2d_buffer 関数は メモリーに対して非連続にアクセスしており 効率の悪い配列の初期化処理が実行されています 連続したアクセスを行う実装がコメントアウトされているので置き換えます Copyright 2015-2018 XLsoft Corporation. All Rights Reserved. 15 / 19
インテル VTune Amplifier - Windows 環境向けスタートガイド 3.5. コードの変更と性能向上の確認 変更後の find_hotspots.cpp void initialize_2d_buffer (unsigned int mem_array [], unsigned int *fill_value) { // First (slower) method of filling array // Array is NOT filled in consecutive memory address order /*********************************** for (int i = 0; i < mem_array_i_max; i++) { // Try to defeat hardware prefetching by varying the stride int j(0), iteration_count(0); do { mem_array [j*mem_array_i_max+i] = *fill_value + 2; // Code to give the array accesses a non-uniform stride to defeat hardware prefetch if ((iteration_count % 3) == 0) j=j+3; else j=iteration_count; iteration_count++; } while (j < mem_array_j_max); } /***********************************/ } // Faster method of filling array // The for loops are interchanged // Array IS filled in consecutive memory address order /**********************************/ for (int j = 0; j < mem_array_j_max; j++) { for (int i = 0; i < mem_array_i_max; i++) { mem_array [j*mem_array_i_max+i] = *fill_value + 2; } } /***********************************/ 置き換えた状態でビルドをやり直して 再度実行します 4. 上部メニューから [ ビルド ] > [ find_hotspots のビルド ] を選択してビルドを行い 実行ファイルを作成します Copyright 2015-2018 XLsoft Corporation. All Rights Reserved. 16 / 19
インテル VTune Amplifier - Windows 環境向けスタートガイド 3.5. コードの変更と性能向上の確認 画像 23. プロジェクトのビルド 5. ビルドしたサンプルプログラムを [ デバッグ ] > [ デバッグなしで開始 ] から実行して 描画時間を確認します 画像 24. プログラムの実行 Copyright 2015-2018 XLsoft Corporation. All Rights Reserved. 17 / 19
インテル VTune Amplifier - Windows 環境向けスタートガイド 3.5. コードの変更と性能向上の確認 画像 25. 実行性能が向上したプログラム 描画時間は高速化して 4 秒程度にまで短縮しました 最適化を行う前にベースラインとして計測した 10.656 秒と比較した場合 約 2.5 倍ほどの性能向上が得られました インテル VTne Amplifier で解析すると下記のような結果が得られます 画像 26. インテル VTune Amplifier の結果 Copyright 2015-2018 XLsoft Corporation. All Rights Reserved. 18 / 19
インテル VTune Amplifier - Windows 環境向けスタートガイド 4. まとめ 4. まとめ このドキュメントでは インテル VTune Amplifier を使用して 基本的な使用方法からサンプルプログラムのホットスポットを発見して修正する手続きを紹介しました インテル VTune Amplifier には 性能解析に必要な様々な機能を備えており ここではごく一部の機能について説明しています より高度な機能を取得するためには より高度な機能を使用するためにから他のチュートリアルも進めてみてください 5. より高度な機能を使用するために ドキュメントで使用した tachyon プログラムには 異なるチュートリアルの analyze_locks が含まれており マルチスレッド化されたプログラムのボトルネックを発見する手続きの一例を学習することができます analyze_locks のチュートリアルは下記の資料から進めることができます Tutorial: Analyzing Locks and Waits ( 英語 ) また ハードウェア イベントに関わる性能解析を学習するためには 下記の Intel 社 Web ページに公開されている各チュートリアルが参考になります Intel Developer Zone - Intel VTune Amplifier Tutorials ( 英語 ) 6. ドキュメント インテル VTune Amplifier の日本語情報は IA Software User Society ( 以下 isus) に公開されている下記のリンク先からアクセスできます isus - インテル VTune Amplifier 2018 製品ページ インテル VTune Amplifier 2018 のリファレンスガイドには日本語参考訳を見ることができます isus - インテル VTune Amplifier 2018 オンラインヘルプ (isus 翻訳版 ) Intel Developer Zone - Intel VTune Amplifier 2018 User s Guide 7. 免責事項 Intel インテル Intel ロゴ VTune は アメリカ合衆国および / またはその他の国における Intel Corporation の商標です * その他の社名 製品名などは 一般に各社の商標または登録商標です XLsoft ロゴ XLsoft は XLsoft Corporation の商標です インテル ソフトウェア製品のパフォーマンス / 最適化に関する詳細は Optimization Notice ( 最適化に関する注意事項 ) を参照してください Copyright 2015-2018 XLsoft Corporation. All Rights Reserved. 19 / 19