並列プログラムのトラブルシューティングにはどのようなツールがありますか?
予想よりもパフォーマンスが悪いコードがあるとします (シリアル バージョンの実行速度の理論上の 8 倍ではなく、4 倍)。原因は、共有変数 (共有ベクトルの隣接要素など) にアクセスするスレッドによって引き起こされるロック、またはヒープ (共有リソースでもあると思われる) にアクセスするスレッドによって引き起こされるロックのいずれかであると思われます。しかし、過剰なスレッドのスリープやスレッドの切り替えなどの原因をチェックするために利用できるツールが何であるかはわかりません。たとえば、プロファイラーは、どの機能にどれくらいの時間がかかったか、おそらく関連する多くのアクティビティがあったことを教えてくれます。スレッド管理についてですが、スレッドの原因と状態が何であったかはわかりません (または、スレッドの使い方がよくわからないかもしれません)。
OS X で C++ を使用しています。