インテル® VTune™ プロファイラーが提供する Python* アプリケーション向けのパフォーマンス解析オプションを使用して、最も時間がかかるコード領域とクリティカルな呼び出しパスを特定します。
インテル® VTune™ プロファイラーは、[アプリケーションを起動] と [プロセスにアタッチ] モードにより、Python* アプリケーションの [ホットスポット]、[スレッド化]、および [メモリー消費] 解析をサポートします。例えば、アプリケーションの数値モデリング量が多い場合、利用可能な CPU リソースがどの程度効率的に利用されているか理解する必要があります。効率的な CPU 使用の良い例は、計算プロセスがネイティブ拡張の実行に最も時間を費やし、Python* の周辺コードの翻訳に多くの時間を費やしていない場合です。
Python* アプリケーションのパフォーマンスを最大限に引き出すには、NumPy* などのネイティブ拡張を使用するか、C やアセンブリーなどネイティブ言語で Python* プロジェクトのパフォーマンスが求められるモジュールを作成してコンパイルします。これは、アプリケーションがベクトル化を利用し、強力な CPU リソースを最大限活用するのに役立ちます。
インテル® VTune™ プロファイラーで Python* コードのパフォーマンスを解析してデータを解釈するには、次の操作を行います。
Python* コードのパフォーマンス解析するには、インテル® VTune™ プロファイラーの GUI またはコマンドライン (vtune) のどちらで設定してもかまいません。
GUI から Python* コードのプロファイルを設定して実行するには、次の操作を行います。
ツールバーの [解析の設定] ボタンをクリックします。
[解析の設定] ウィンドウが表示されます。
ターゲットシステムとターゲットタイプを選択します。例: [ローカルホスト] と [アプリケーションを起動]。
Windows* と Linux* ターゲットシステムのみがサポートされます。
[アプリケーションを起動] 設定ペインで、[アプリケーション] フィールドにインストールされている Python* インタープリターへのパスを、[アプリケーションの引数] フィールドに Python* スクリプトへのパスを指定します。
[アプリケーションの引数] フィールドに Python* スクリプトへの相対パスを指定すると、インテル® VTune™ プロファイラーはインポートされたモジュールの完全な関数名やメソッド名は適切に解決できますが、メインスクリプト内の名前を解決できません。スクリプトへの絶対パスを指定することを検討してください。
さらに、[マネージドコードのプロファイル・モード] を [自動] に設定すると、インテル® VTune™ プロファイラーはターゲット実行形式のタイプ (マネージドまたはネイティブ) を自動的に検出して、適切なモードに切り替えます。必要に応じて、[子プロセスを解析] オプションを選択して、ターゲットプロセスから起動されたプロセスのデータを収集します。例えば、Linux* では次のように設定します。
Python* アプリケーションをプロファイル前にしばらく実行する必要がある場合や、解析を開始するときに起動できない場合、インテル® VTune™ プロファイラーを Python* プロセスにアタッチすることもできます。これを有効にするには、[プロセスにアタッチ] ターゲットタイプを選択して、Python* プロセス名または PID を次のように指定します。
インテル® VTune™ プロファイラーを Python* プロセスにアタッチする場合、解析を開始する前にスクリプト内でグローバル・インタープリター・ロック (GIL) を初期化することを忘れないでください。GIL が初期化されないと、インテル® VTune™ プロファイラーのコレクターは新たに呼び出された Python* 関数のみを初期化します。
右の [どのように] 設定ペインで、[ホットスポット]、[スレッド化]、または [メモリーアクセス] 解析タイプを選択します。
必要に応じて、以下のオプションを設定するか、デフォルトで使用します。
[ユーザーモード・サンプリング] モード |
ホットスポットとコールスタック解析 (以前の基本ホットスポット) でユーザーモード・サンプリングとトレース収集を有効にする場合に選択します。この収集モードのサンプリング間隔は 10 ミリ秒に固定されています。サンプリング間隔を変更するには、[コピー] ボタンをクリックしてカスタム解析設定を作成します。 |
[ハードウェア・イベントベース・サンプリング] モード |
ホットスポット解析 (以前の高度なホットスポット) でハードウェア・イベントベース・サンプリング収集を有効にする場合に選択します。 この収集モードでは以下のオプションを設定できます。
注収集オプションを変更する場合、右にある [オーバーヘッド] 分布図に注意してください。選択したオプションに応じて、発生するオーバーヘッドは動的に変化します。 |
[追加のパフォーマンス情報を表示] チェックボックス |
ベクトル化など追加のパフォーマンス情報を取得して次のステップに進みます。このオプションは追加の CPU イベントを収集しますが、これにより多重化モードが有効になることがあります。 このオプションは、デフォルトで有効になります。 |
[詳細] ボタン |
この解析タイプのデフォルトの編集不可設定のリストを展開/折りたたみます。解析の設定を変更したり、追加の設定を有効にするには、既存の事前定義設定をコピーしてカスタム設定を作成する必要があります。インテル® VTune™ プロファイラーは、解析タイプ設定の編集可能なコピーを作成します。 |
[開始] ボタンをクリックして解析を実行します。
ユーザーモード・サンプリング・モードのホットスポット解析は、実行に時間がかかる Python* コード領域 (ホットスポット) をタイミングメトリックとコールスタックとともに特定するのに役立ちます。また、[タイムライン] ペインにはスレッド間のワークロードの分布も表示されます。
デフォルトでは、[自動] マネージドコード・プロファイル・モードが使用され、Python*/C++ アプリケーションの混在スタックを表示して解析できます。次の例では、左のペインに、ネイティブ・ホットスポットのインテル® oneAPI マス・カーネル・ライブラリー (oneMKL) 関数が表示されています。右ペインの混在コールスタック解析では、実際にホットスポット関数を呼び出す Python* black_scholes 関数を示しています。
[コールスタック] ペインの black_scholes 関数をダブルクリックして、呼び出しサイトの 66 行目のソースコードを開きます。
Python* コード内のコールスタックのみを表示するには、フィルターバーの [コールスタック・モード] で [ユーザー関数のみ] オプションを選択して、Python* のコアおよびシステム関数をフィルターアウトします。
インテル® VTune™ プロファイラーは、制限付きで Python* コードのプロファイルをサポートします。
Python* ディストリビューション 2.6 以降でサポートされます。
Python* コードをネイティブ言語にコンパイルする Python* 拡張を使用すると、インテル® VTune™ プロファイラーは誤った解析結果を表示することがあります。この問題を解決するには、JIT プロファイル API を使用することを検討してください。
Python* コードのプロファイルは、Windows* と Linux* ターゲットシステムでのみサポートされます。
場合によっては、インテル® VTune™ プロファイラーは Windows* 上の Python* 関数およびモジュールの名前を解決できないことがあります。その場合、適切なソース情報が表示されるため、インテル® VTune™ プロファイラーのビューポイントから直接ソースを開くことができます。
常に適切なスレッド名が [タイムライン] ペインに表示されるとは限りません。
アプリケーションのスタックが非常に浅く、呼び出された関数とインポートされたモジュールが含まれる場合、インテル® VTune™ プロファイラーは Python* データを収集しません。プロファイルを行うには深い呼び出しを使用することを検討してください。
リモートでデータを収集する場合、インテル® VTune™ プロファイラーは関数名やメソッド名を解決できず、Python* スクリプトのソースを表示することがあります。Linux* ターゲットでこの問題を解決するには、解析を実行する前にターゲットシステムと同じパスを使用して、ソースファイルをホストシステムのディレクトリーにコピーします。