私が理解している限り、サンプリング プロファイラーは次のように動作します。定期的にプログラムの実行を中断し、コール スタックを読み取ります。プログラムのどの部分が現在実行されているかを記録し、プログラムのこの部分を表すカウンターをインクリメントします。後処理ステップ: プログラムの各関数について、関数が担当する実行時間全体の比率が計算されます。これは、この特定の関数のカウンター C とサンプルの総数 N を調べることによって行われます。
関数の比 = C / N
ホットスポットは、プログラムの中で比率の高い部分であるため、簡単に見つけることができます。
しかし、並列ハードウェア上で実行される並列プログラムに対してこれを行うにはどうすればよいでしょうか。私の知る限り、プログラムの実行が中断されると、すべてのプロセッサでプログラムの実行部分が決定されます。そのため、並行して実行される関数は複数回カウントされます。したがって、この関数のサンプル数 C は、実行時間全体のシェアを計算するために使用できなくなります。
私の考えは正しいですか?並列プログラムのホットスポットを特定する方法は他にありますか? それとも、サンプリングを使用してこれを行うことはできないのでしょうか?