Parallel Universeへようこそ―マルチコアプロセッサー向けのソフトウェア開発―

この記事を読むのに必要な時間:およそ 6 分

インテルParallel Amplifer

マルチスレッドアプリケーション特有のパフォーマンス問題は,次のように要約できます。

  • 複雑性(データ再構成,同期化の使用)
  • パフォーマンス(最適化とチューニングの必要性)
  • 同期オーバーヘッド

インテルParallel Amplifier図8は,開発者が投資収益率(ROI)の最も高い最適化を実現できるように,コードのボトルネックを特定するのを支援します。アプリケーションのパフォーマンス問題を特定し適切に排除することは,効率的な最適化を行ううえで重要です。

図8 インテルParallel Amplifierのツールバー

図8 インテルParallel Amplifierのツールバー

インテルParallel Amplifierでは数回のマウスクリック操作を行うだけで,hotspot分析図9⁠,並列性分析図10⁠,そしてロックと待機の分析という3種類の強力なパフォーマンス解析を行うことができます。なお,各分析で使用する指標は次のとおりです。

  • 経過時間:アプリケーションの実行時間
  • CPU時間:プロセッサーでスレッドが実行に消費した時間。複数のスレッドの場合は,すべてのスレッドのCPU時間が合計される
  • 待機時間:指定されたスレッドが,同期待機やI/O待機などのイベントが発生するまで待機に要した時間

図9 インテルParallel Amplifierのhotspot分析結果

図9 インテルParallel Amplifierのhotspot分析結果

図10 インテルParallel Amplifierの並列性分析結果

図10 インテルParallel Amplifierの並列性分析結果

hotspot分析

オーバーヘッドの低い統計サンプリング(スタックサンプリングとも呼ばれる)アルゴリズムを使用することで,開発者がアプリケーションフローを理解し,実行に時間のかかるコードセクション(hotspot)を特定できるようにします。hotspot分析中,インテルParallel AmplifierはOSタイマーを使用して一定の間隔でサンプリングを行い,アプリケーションをプロファイルします。

すべてのアクティブな命令アドレスとその呼び出しシーケンスのサンプルが収集されます。そして,格納されたサンプリング結果のインストラクションポインタ(IP)と関連する呼び出しシーケンスを分析し,表示します。統計的に収集されたIPサンプルと呼び出しシーケンスを使用して,インテルParallel Amplifierはコールツリーを生成し,表示します。

並列性分析

並列性分析は,アプリケーションがシステムで利用可能なプロセッサーをどれだけ活用しているかを測定します。図10に示すように,プロセッサーが有効に利用されていないhotspot関数を特定するのに役立ちます。

並列性分析中,インテルParallel Amplifierはアクティブなスレッド数を収集して提供します。並列レベルとプロセッサー数を比較することで,アプリケーションによるシステムで利用可能なプロセッサーの利用状況を分類します。

「Concurrency(並列性⁠⁠」ウィンドウと「Locks and Waits(ロックと待機⁠⁠」ウィンドウの時間は,次の利用状況を示します図11⁠。

  • Idle:プログラム中のすべてのスレッドが待機中。実行中のスレッドはない
  • Poor:十分に利用されていない。デフォルトではスレッド数が並列化ターゲットの50%以下の場合
  • OK:許容可能範囲で利用されている。デフォルトではスレッド数が並列化ターゲットの51.85%の場合
  • Ideal:理想的に有効利用されている。デフォルトではスレッド数が並列化ターゲットの86.115%の場合

図11 インテルParallel Amplifierの並列分析結果サマリービュー

図11 インテルParallel Amplifierの並列分析結果サマリービュー

ロックと待機の分析

並列性分析がアプリケーションの並列化されていない場所や利用可能なプロセッサーを十分に活用していない場所の特定を支援する一方で,ロックと待機の分析は,プロセッサーが有効に利用されていない原因を特定するのに役立ちます図12⁠。プロセッサーが有効に利用されていない最も一般的な原因は,スレッドが同期オブジェクト(ロック)を長時間待機しているためです。多くの場合,この間に有効な作業が行われないため,パフォーマンスが低下し,プロセッサーが有効に使用されません。

図12 ロックと待機の分析結果

図12 ロックと待機の分析結果

ロックと待機の分析中,開発者は各同期オブジェクトの影響を予測することができます。分析結果は,各同期オブジェクトまたはスリープやブロッキングI/OなどのブロッキングAPIにおける,アプリケーションの待機時間を理解するのに役立ちます。

インテルParallel InspectorとインテルParallelAmplifierは,両方ともソースコードレベルまでドリルダウンすることができます。これは非常に重要なことです。たとえば,図13の行をダブルクリックしてソースコードにドリルダウンし,問題を引き起こしている同期オブジェクトを確認できます。

図13 ロックと待機の分析のソースコードビュー

図13 ロックと待機の分析のソースコードビュー