並列プログラムで実行時測定に関する質問があります(私はC++を使用しましたが、より一般的です)。相互依存スレッドの並列計算時間の測定
いくつかの短い説明:3つのスレッドが並列(pthread)に実行され、同じ問題がさまざまな方法で解決されています。各スレッドは、自身の計算における自分自身の状態/利用可能な情報に応じて、他のスレッドをスピードアップするために、他のスレッドに情報を渡すことができる(例えば、一方のスレッドによって得られた部分解は、最初のスレッドの準備が整うとすぐに、プロセス全体が停止します。 私は、問題が解決されるまで、ランタイムを最初から評価するための独自の時間測定をしたいと考えています。 (最終的には、並列計算による相乗効果を使用する方が速いのか、単一スレッドで計算するのかを判断したい)
私の目では、(オペレーティングシステムが単一スレッドを一時停止/一時停止しているため)、プロセス内で情報が渡される時点は、各プロセスの状態で決定的ではありません。つまり、ある情報はスレッド1のCPU時間のxxx単位の後に取得されますが、スレッド2がyyyの後にこの情報を受け取るか、CPU時間のzzz単位が計算に費やされたかどうかは制御できません。この情報がいずれの場合にもスレッド2の計算を終了したと仮定すると、スレッド2の実行時間はオペレーティングシステムの動作に応じてyyyまたはzzzのいずれかであった。
ランタイム比較のための確定的な動作を得るにはどうすればよいですか?各スレッドを「妨げられない」(マルチコアマシン上で)実行するようにオペレーティングシステムを命令することはできますか?実装(C++)に基づいて何かできることはありますか?
また、そのような実装のランタイム(時間の利得)を評価するための他の概念がありますか?
敬具 マーティン
各スレッドを特定のコアにマッピングすることによって、セットアップのパフォーマンスをチェックしましたか? –
いいえ、私はこの可能性を認識していませんでした(今試してみます)。 OSがまだそこに干渉しているかどうかは、そのコアに異なるタスクをロードするか、このコア間で非決定論的なやり方で通信するかによってはわかりませんが。 – Martin
は公平な作業負荷のために、私は他のスレッドのコンテキストの切り替えとマッピングがあなたのスレッドにパフォーマンス上の問題を引き起こすとは思わない。しかし、OSや他のアプリケーションによるキャッシュ汚染は、パフォーマンスを大きく低下させる可能性があります。正確な数字についてはあまりよく分かりません。 –