2012-05-02 4 views
5

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?

+1

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

+6

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

+0

Mark Twain'i paraphrase etmek için; * "Yalanlar, lanet yalanlar, istatistikler ve ölçütler var ..." * –

cevap

10

çok azdır ve oluşturma ve çoklu konuları yönetme ile ilgili oldukça önemli havai yoktur.

Paralel programlama, her yineleme işleminin işlemci süresi açısından yeterince pahalı olması durumunda verimliliği artırır.

2

Ben döngü çok basit, çok hızlı çalışması olduğundan bu olduğunu düşünüyorum. öyle hepsi paralel olmayan versiyonunun durumunda

. Ancak paralel versiyonun bir delege çağırması gerekiyor. Bir temsilci çağırmak oldukça hızlıdır ve genellikle bunu ne sıklıkta yaptığınızdan endişelenmenize gerek yoktur. Ama bu uç durumda, farkı yaratan şey bu. Bir delege çağırmanın, bir diziden bir sayı eklemekten on kat daha yavaş (veya tam oranın ne olduğu hakkında hiçbir fikrim yok) olacağını kolayca hayal edebiliyorum. Zaman sizin örnekte her tekrarında işlemleri yaparak geçirmiş çünkü sıralı versiyonu daha hızlı

2

Sen elmalarla armutların karşılaştırılması değildir.

bağlanmak örnek olduğu kadar farklı iş parçacıkları aramızda paylaşılmasını devleti ayırmadan hakkındadır olarak paralellik veya eşzamanlılık ilgili değil. 'un numaralı çalışmasında, bir şeylerin yapıldığını göstermek için hasır bir adam var.

Yani karşılaştırarak ne Top Yakıt Dragster bir F1 aracı karşılaştırmak gibidir. hızlı, ancak hızlı giden her bir excel, bu ve çoğu durumda son derece uzmanlaşmış olan bağlam ile ilgilidir. Diğerleri de son derece uzmanlaşmış bailiwick'lerde rekabet edemez.

Dersler

  • birlikte yapılan öğrenmek için! = Hızlı
  • kötü tasarlanmış kriterler