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* 関数のみを初期化します。

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

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

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

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

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

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

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

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

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

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

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

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

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

    [詳細] ボタン

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

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

ホットスポットを特定

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

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

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

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

制限事項

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

関連情報