並列プログラムでの実行時測定について質問があります(C ++を使用しましたが、質問はより一般的だと思います)。
簡単な説明:3つのスレッドが並列で実行され(pthread)、同じ問題をさまざまな方法で解決します。各スレッドは、自分のステータス/自分の計算で利用可能な情報に応じて、他のスレッドを高速化するために他のスレッドに情報を渡すことができます(たとえば、一方のスレッドによって取得されたが、もう一方のスレッドによっては取得されていない部分的なソリューション)。最初のスレッドの準備ができるとすぐに、プロセス全体が停止します。ここで、開始から問題が解決するまでの実行時間を評価するための独自の時間測定を行いたいと思います。(最後に、並列計算による相乗効果の使用が単一スレッドでの計算よりも速いかどうかを判断したいと思います)。
私の目には、問題は(オペレーティングシステムがシングルスレッドを一時停止/一時停止解除するため)、プロセスで情報が渡されるポイントが各プロセスの状態で決定論的ではないということです。つまり、特定の情報は、スレッド1でxxx単位のcpu時間後に取得されますが、スレッド2が計算に費やされたyyyまたはzzz単位のcpu時間の後にこの情報を受信するかどうかは、制御できません。いずれにせよ、この情報がスレッド2の計算を終了すると仮定すると、スレッド2の実行時間は、オペレーティングシステムのアクションに応じて、yyyまたはzzzのいずれかになります。
実行時の比較のために決定論的な動作を取得するにはどうすればよいですか?(マルチコアマシン上で)各スレッドを「邪魔されずに」実行するようにオペレーティングシステムに注文できますか?実装(c ++)ベースでできることはありますか?
または、そのような実装のランタイム(タイムゲイン)を評価するための他の概念はありますか?
よろしくマーティン