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

スピンとオーバーヘッド時間

オーバーヘッド時間

オーバーヘッド時間は、システムが共有リソースを解放した所有者から取得した所有者に提供するのにかかる時間です。理想的には、オーバーヘッド時間は、リソースがアイドル状態で無駄に消費されていないことを意味するため、ゼロに近い値にする必要があります。しかし、並列アプリケーションのすべての CPU 時間が、実際のワークに費やされるわけではありません。並列ランタイム (インテル® TBB、インテル® Cilk™ Plus、OpenMP* など) が非効率に使用される場合、並列ランタイムでかなりの CPU 時間が無駄に消費される可能性があります。例えば、一定量のワークを並列に実行するスレッドの数を増やすと各スレッドのワークが少なくなり、相対的な尺度としてのオーバーヘッドは大きくなります。これは、アムダールの法則の基本的な応用です。

CPU 時間の浪費を減らすため、インテル® VTune™ プロファイラーはある時点のコールスタックを解析し、オーバーヘッド時間のパフォーマンス・メトリックを計算します。インテル® VTune™ プロファイラーは、スタックレイヤーをユーザー、システム、およびオーバーヘッド・レイヤーに分類し、オーバーヘッド関数によって呼び出されるシステム関数で費やされた CPU 時間をオーバーヘッド関数に属性化します。

スピン時間

スピン時間は、CPU がビジーだった間の待機時間です。通常は、ソフトウェア・スレッドが待機中に、同期 API により CPU がポーリングされると発生します。ある程度のスピン時間であれば、スレッドのコンテキスト・スイッチを増加させるよりも良いかもしれません。ただし、スピン時間が長すぎるとワークの生産性に影響します。

オーバーヘッドとスピン時間

インテル® VTune™ プロファイラーは、CPU 利用率によるホットスポット、スレッド並行性によるホットスポット、およびホットスポット・ビューポイントのグリッドとタイムライン・ビューで、合計した [オーバーヘッドとスピン時間] メトリックを提供します。このメトリックは、呼び出しサイトのタイプがオーバーヘッドの CPU 時間 + 呼び出しサイトのタイプが同期の CPU 時間として計算されたオーバーヘッド時間値とスピン時間値の合計を表します。オーバーヘッドとスピン時間の値を個別に表示するには、 シンボルをクリックしてカラムを展開します。

インテル® VTune™ プロファイラーは、CPU 利用率メトリックを計算する際に、オーバーヘッドとスピン時間を無視します。

考えられる問題

CPU 時間の大部分が同期またはスレッドのオーバーヘッドで費やされています。タスクの粒度またはデータ同期のスコープを増やすことを検討してください。

関連情報