HPC/並列プログラミングポータルでは、HPC(High Performance Computing)プログラミングや並列プログラミングに関する情報を集積・発信しています。

新着トピックス

発見しにくいマルチスレッドのエラーを検出するParallel Inspector

 Parallel Inspectorは、メモリリークや不正なメモリアクセス、未初期化のメモリへのアクセスといったメモリ関連のエラーや、データの競合やデッドロックといったマルチスレッド処理特有のエラーを分析・検出するツールである(図1)。

 たとえば、複数のスレッド間でデータの競合が発生した場合、その競合がデータの書き込みに関するものなのかそれとも読み出しに関するものなのか、またソースコード中のどの部分でその問題が発生しているのか、どのような順番で処理が行われたのかなど、Parallel Inspectorを利用することで詳細な情報を確認することができる。

 Parallel Inspectorを利用する際、デバッグ用に特別なライブラリを利用したり、プログラム中に検証用のコードを埋め込む、といった作業は不要だ。そのため、「デバッガ経由で実行すると問題が再現しない」、「デバッガ経由での実行時は実際の実行時と挙動が異なる」といった問題が発生しない。また、Visual Studioと統合されているため、その場でソースコードの表示・修正を行えるのも便利である。

プログラムのボトルネックを検出するマルチスレッド対応プロファイラ「Parallel Amplifier」

 Parallel Amplifierは、プログラム中の任意の個所の実行回数や実行時間などを調査できる、プロファイラと呼ばれるツールである。Parallel Amplifierを利用することで、たとえばプログラム中で実行に時間がかかっている個所を特定したり、関数がどのような順序で呼び出されているのかなどを調査することができる(図2)。

 また、Parallel Amplifierで特徴的な機能として、マルチコアCPUでプログラムを実行する際に各コアの動作状況をチェックしてCPUを有効活用できているか調査したり、同期/排他処理によるスレッドのロックがパフォーマンスに与える影響などを測定する、といったものがある。