インテル® VTune™ プロファイラー・ユーザーガイド

Python* コードの解析

インテル® VTune™ プロファイラーが提供する Python* アプリケーション向けのパフォーマンス解析オプションを使用して、最も時間がかかるコード領域とクリティカルな呼び出しパスを特定します。

インテル® VTune™ プロファイラーは、[アプリケーションを起動][プロセスにアタッチ] モードにより、Python* アプリケーションの [ホットスポット][スレッド化]、および [メモリー消費] 解析をサポートします。例えば、アプリケーションの数値モデリング量が多い場合、利用可能な CPU リソースがどの程度効率良く使用されているか理解する必要があります。効率良い CPU 使用の例は、計算プロセスがネイティブ拡張の実行に最も時間を費やし、Python* の周辺コードを解釈していない場合です。

Python* アプリケーションのパフォーマンスを最大限に引き出すには、NumPy* などのネイティブ拡張を使用するか、C やアセンブリーなどネイティブ言語で Python* プロジェクトのパフォーマンス・クリティカルなモジュールを作成してコンパイルします。これは、アプリケーションがベクトル化や強力な CPU リソースを活用するのに役立ちます。

インテル® VTune™ プロファイラーで Python* コードのパフォーマンスを解析してデータを解釈するには、次の操作を行います。

Python* データ収集を設定

Python* コードのパフォーマンスを解析するには、インテル® VTune™ プロファイラーの GUI またはコマンドライン (vtune) のどちらで設定してもかまいません。

GUI から Python* コードのプロファイルを設定して実行するには、次の操作を行います。

  1. ツールバーの [解析の設定] ボタンをクリックします。

    [解析の設定] ウィンドウが開きます。

  2. ターゲットシステムとターゲットタイプ (例えば、[ローカルホスト][アプリケーションを起動]) を選択します。

    Windows* と Linux* ターゲットシステムのみがサポートされます。

  3. [アプリケーションを起動] 設定ペインで、[アプリケーション] フィールドにインストールされている Python* インタープリターへのパスを、[アプリケーションの引数] フィールドに Python* スクリプトへのパスを指定します。

    [アプリケーションの引数] フィールドに Python* スクリプトへの相対パスを指定すると、インテル® VTune™ プロファイラーはインポートされたモジュールの完全な関数名やメソッド名は適切に解決できますが、メインスクリプト内の名前を解決できません。スクリプトへの絶対パスを指定することを検討してください。

    さらに、[マネージドコードのプロファイル・モード][自動] に設定すると、インテル® VTune™ プロファイラーはターゲット実行形式のタイプ (マネージドまたはネイティブ) を自動的に検出して、適切なモードに切り替えます。必要に応じて、[子プロセスを解析] オプションをオンにして、ターゲットプロセスから起動されたプロセスのデータを収集します。例えば、Linux* では次のように設定します。

    Python* アプリケーションをプロファイル前にしばらく実行する必要がある場合や、解析を開始するときに起動できない場合、インテル® VTune™ プロファイラーを Python* プロセスにアタッチすることもできます。その場合、次のように [プロセスにアタッチ] ターゲットタイプを選択して、Python* プロセス名または PID を指定します。

    インテル® VTune™ プロファイラーを Python* プロセスにアタッチする場合、解析を開始する前にスクリプト内でグローバル・インタープリター・ロック (GIL) を初期化することを忘れないでください。GIL が初期化されないと、インテル® VTune™ プロファイラーのコレクターは新しい Python* 関数が呼び出されたときにのみを GIL を初期化します。

  4. 右側にある [どのように] 設定ペインで、ホットスポットスレッド化、またはメモリーアクセス解析タイプを選択します。

  5. 必要に応じて以下のオプションを設定するか、デフォルトで使用します。

    [ユーザーモード・サンプリング] モード

    ホットスポットとコールスタック解析 (以前の基本ホットスポット) でユーザーモード・サンプリングとトレース収集を有効にする場合に選択します。この収集モードのサンプリング間隔は 10 ミリ秒に固定されています。サンプリング間隔を変更するには、[コピー] ボタンをクリックしてカスタム解析設定を作成します。

    [ハードウェア・イベントベース・サンプリング] モード

    ホットスポット解析 (以前の高度なホットスポット) でハードウェア・イベントベース・サンプリング収集を有効にする場合に選択します。

    この収集モードでは以下のオプションを設定できます。

    • [CPU サンプリング間隔 (ミリ秒)] では、CPU サンプリングの間隔を ミリ秒単位で指定します。ハードウェア・イベントベース・サンプリング・モードで指定可能な値は、0.01 - 1000 です。デフォルトで 1 ミリ秒 が使用されます。

    • [コールスタック] は、コールスタックとスレッドのコンテキスト・スイッチの高度な解析を有効にします。

    収集オプションを変更する場合、右にあるオーバーヘッド分布図に注意してください。選択したオプションにより、発生するオーバーヘッドは動的に変化します。

    [追加のパフォーマンス情報を表示] チェックボックス

    ベクトル化の効率など追加のパフォーマンス情報を取得して次のステップに進みます。このオプションは追加の CPU イベントを収集しますが、これにより多重化モードが有効になることがあります。

    このオプションはデフォルトで有効になります。

    [詳細] ボタン

    この解析タイプのデフォルトの編集不可設定のリストセクションを、展開/折りたたみます。解析の設定を変更または設定の追加を有効にするには、既存の事前定義設定をコピーしてカスタム設定を作成する必要があります。インテル® VTune™ プロファイラーは、解析タイプ設定の編集可能なコピーを作成します。

  6. 解析を実行するには [開始] ボタンをクリックします。

ホットスポットを特定

ユーザーモード・サンプリング・モードのホットスポット解析は、実行に時間がかかる Python* コードのセクション (ホットスポット) とそのタイミングメトリックとコールスタックを特定するのに役立ちます。また、[タイムライン] ペインにはスレッド間のワークロードの分布も表示されます。

デフォルトでは、インテル® VTune™ プロファイラーはマネージドコードの [自動] プロファイル・モードを使用します。これは、Python*/C++ アプリケーションの混在スタック解析と表示を可能にします。次の例では、左のペインに、ネイティブ・ホットスポットのインテル® マス・カーネル・ライブラリー (インテル® MKL) 関数が表示されています。右ペインの混在コールスタック解析から、実際にホットスポット関数を呼び出しているのは Python* black_scholes 関数であることが分かります。

[コールスタック] ペインで black_scholes 関数をダブルクリックして、呼び出しサイトの 66 行目のソースコードを開きます。

Python* コード内のコールスタックのみを表示するには、フィルターバーの [コールスタック・モード][ユーザー関数のみ] オプションを選択して、Python* のコアおよびシステム関数をフィルターアウトします。

制限事項

インテル® VTune™ プロファイラーは、制限付きで Python* コードのプロファイルをサポートします。

関連情報