Son birkaç gün içinde paralellik hakkında biraz bilgi edindim ve this örneğiyle karşılaştım. Ben şaşırdımBu örnekte paralel sürüm neden ardışık sürümden daha yavaşdı?
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);
}
NoParallel yöntemi sitesinde verilen paralel örnek çok daha hızlı şekilde bitmiş olduğunu görmek için:
Ben yan böyle bir for döngüsü sıralı tarafını koydu.
Bir i5 PC'im var.
Paralel yöntemin daha hızlı bitireceğini düşündüm.
Bunun mantıklı bir açıklaması var mıdır? Belki bir şeyi yanlış anlamış olurum?
yanıltmak paralel versiyonu aslında çoklu çekirdek üzerinde çalıştığını doğrulamak miyim? Ve yineleme sayısını (daha büyük 'Range') artırdığınızda ne olur? – chrisaycock
Paralel versiyonun birden fazla çekirdek üzerinde çalıştığını varsayarak, özellikle baştan aşağı iplik senkronizasyonunun ne kadar olduğunu gösterebiliriz ... özellikle önemsiz bir kod parçası. – Oded
Mark Twain'i paraphrase etmek için; * "Yalanlar, lanet yalanlar, istatistikler ve ölçütler var ..." * –