4

並列プログラムでの実行時測定について質問があります(C ++を使用しましたが、質問はより一般的だと思います)。

簡単な説明:3つのスレッドが並列で実行され(pthread)、同じ問題をさまざまな方法で解決します。各スレッドは、自分のステータス/自分の計算で利用可能な情報に応じて、他のスレッドを高速化するために他のスレッドに情報を渡すことができます(たとえば、一方のスレッドによって取得されたが、もう一方のスレッドによっては取得されていない部分的なソリューション)。最初のスレッドの準備ができるとすぐに、プロセス全体が停止します。ここで、開始から問題が解決するまでの実行時間を評価するための独自の時間測定を行いたいと思います。(最後に、並列計算による相乗効果の使用が単一スレッドでの計算よりも速いかどうかを判断したいと思います)。

私の目には、問題は(オペレーティングシステムがシングルスレッドを一時停止/一時停止解除するため)、プロセスで情報が渡されるポイントが各プロセスの状態で決定論的ではないということです。つまり、特定の情報は、スレッド1でxxx単位のcpu時間後に取得されますが、スレッド2が計算に費やされたyyyまたはzzz単位のcpu時間の後にこの情報を受信するかどうかは、制御できません。いずれにせよ、この情報がスレッド2の計算を終了すると仮定すると、スレッド2の実行時間は、オペレーティングシステムのアクションに応じて、yyyまたはzzzのいずれかになります。

実行時の比較のために決定論的な動作を取得するにはどうすればよいですか?(マルチコアマシン上で)各スレッドを「邪魔されずに」実行するようにオペレーティングシステムに注文できますか?実装(c ++)ベースでできることはありますか?

または、そのような実装のランタイム(タイムゲイン)を評価するための他の概念はありますか?

よろしくマーティン

4

2 に答える 2

0

そのような測定の使用は何ですか?

工夫された方法で、スレッドが邪魔されずに (キャッシュや MMU などを使用する他のプロセスなどの間接的なイベントによっても) 実行されるように OS スケジューラを設定できるとします。プログラム?

最新の OS では、アプリケーションが一般的な割り込み処理、メモリ管理、スレッド スケジューリングなどを制御できるようにすることはほとんどありません。金属と直接話している場合を除き、決定論的な測定は非現実的であるだけでなく、プログラムのユーザーそれらを経験することはありません (測定を行ったときと同じように金属に近い場合を除きます)。

私の質問は、なぜあなたのプログラムを測定するためにそのような厳しい条件が必要なのですか? 一般的なケースでは、ユーザーが目にする可能性が最も高い変動をそのまま受け入れてください。特定のアルゴリズム/実装の速度向上がバックグラウンド ノイズと区別できないほど重要ではない場合、実際の速度向上率を知るよりも、そのほうが有益な情報です。

于 2012-07-26T15:27:52.820 に答える