0

仮定の質問。

8 つのスレッドを形成し、異なるスレッドでデータを処理してプロセスを完了するマルチスレッド コードを 1 つ作成しました。コードでセマフォも使用しています。しかし、マシンによって実行時間が異なります。これは明らかです!!

同じコードの実行時間:

Intel(R) Core(TM) i3 CPU マシン上: 36 秒

AMD FX(tm)-8350 8 コア プロセッサ マシンの場合: 32 秒

Intel(R) Core(TM) i5-2400 CPU マシン上: 16.5 秒

だから、私の質問は、

上位のマシンでは有効にできるが、下位のマシンでは有効にできない設定/変数/コマンド/スイッチがありません。これにより、上位のマシンの実行時間が短縮されますか? それとも、時間差があるため、プロセッサのみですか。

どんな種類のヘルプ/提案/コメントも役に立ちます。

オペレーティング システム: Linux (Centos5)

4

2 に答える 2

1

マルチスレッド ベンチマークは、有意な統計的サンプリングを使用して実行する必要があります (例: マシンごとに約 50 の実験)。さらに、プログラムが実行される「環境」も重要です (例: firefox が同時に実行されていたかどうか)。

また、リソースの消費量によっては、ランタイムが異なる場合があります。言い換えれば、実験条件のより完全な描写がなければ、あなたの質問に答えることは不可能です.

私が個人的な実験から得たいくつかの観察:

  • 大量のメモリ消費により、マシンのスワッピング設定に応じて結果が変わる可能性があります。

  • 同じ OS が同じ条件下でインストールされた 2 つの「同一の」マシンが、異なる結果を示す場合があります。

  • 合計スループットが 5 分間に比べて小さい場合、結果はかなりランダムに表示されます。

于 2013-10-09T13:28:25.060 に答える
0

以前は時間の測定に問題がありました.マルチスレッドの時間はシングルスレッドの時間よりも長いです. 最後に、問題は、各スレッドの時間を測定して合計するのではなく、すべてのスレッドから測定することであることがわかりました。例えば:

間違った測定:

int main(void)
{
   //create_thread();
   //join_thread();
   //sum the time
}

void thread(void *)
{
   //measure time in thread
}

正しい測定:

int main(void)
{
   //record start time

   //create_thread();
   //join_thread();

   //record end time

   //calculate the diff
}

void thread(void *)
{
   //measure time in thread
}
于 2013-10-09T10:37:56.080 に答える