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