私はここ数日で並列性について少し学びました。そして、私はthisの例に出くわしました。この例では、パラレルバージョンがシーケンシャルバージョンより遅いのはなぜですか?
私はそれをこのようなループのシーケンシャルで左右に置く:私はNOPARALLEL方法がサイトで与えられたパラレル例より道道速く終了したことを見て驚きました
private static void NoParallelTest()
{
int[] nums = Enumerable.Range(0, 1000000).ToArray();
long total = 0;
var watch = Stopwatch.StartNew();
for (int i = 0; i < nums.Length; i++)
{
total += nums[i];
}
Console.WriteLine("NoParallel");
Console.WriteLine(watch.ElapsedMilliseconds);
Console.WriteLine("The total is {0}", total);
}
を。
私はi5 PCを持っています。
私は実際にParallelメソッドがより速く終了すると考えました。
これについて合理的な説明はありますか?たぶん私は何かを誤解したでしょうか?
誤解あなたはパラレルバージョンは、実際に複数のコア上で実行されたことを確認することができますか?反復回数を増やすと(大きな「Range」)何が起こりますか? – chrisaycock
並列バージョンが複数のコアで動作していたと仮定すると、スレッド同期がどのくらいのオーバーヘッドをかけることができるかを簡単に示すことができます。 – Oded
Mark Twainの言い換えをする。 *「嘘、嘘つき、統計、ベンチマークがある」* –