Akış API'sı, hesaplamaların nasıl yürütüleceğinden soyutlanacak şekilde yazılmasını kolaylaştıracak şekilde tasarlanmıştır ve sıralı ve paralel arasında geçişi kolaylaştırır.
Ancak, kolay olması nedeniyle, her zaman iyi bir fikir olduğu anlamına gelmez ve aslında, sadece yapabildiğiniz için her yere düşmek kötü bir fikirdir .parallel()
.
İlk olarak, paralelliğin daha fazla çekirdek olduğunda daha hızlı yürütme olasılığı dışında hiçbir fayda sağlamadığını unutmayın. Paralel bir yürütme her zaman sıralı olandan daha fazla iş içerecektir, çünkü problemi çözmenin yanı sıra alt görevlerin gönderilmesini ve koordine edilmesini de yapmak zorundadır. Umut, işi birden fazla işlemcide parçalayarak cevaba daha hızlı ulaşabilmenizdir; bunun gerçekleşip gerçekleşmediği, veri kümenizin boyutu, her öğe üzerinde ne kadar hesaplama yaptığınız, hesaplamanın doğası (özellikle, bir öğenin işlenmesi diğerlerinin işlenmesi ile etkileşime giriyor mu?) , kullanılabilir işlemci sayısı ve bu işlemciler için rekabet eden diğer görevlerin sayısı.
Ayrıca, paralelliğin sıklıkla, sıralı uygulamalar tarafından sıklıkla gizlenen hesaplamada genellikle belirsizliği ortaya çıkardığını unutmayın; bazen bu önemli değildir veya ilgili operasyonları kısıtlayarak hafifletilebilir (yani azaltma operatörleri vatansız ve çağrışımsal olmalıdır).
Gerçekte, bazen paralellik hesaplamanızı hızlandıracak, bazen de olmayacak, hatta bazen yavaşlatacaktır. İlk önce ardışık yürütmeyi kullanarak geliştirmek ve sonra paralellik uygulamak en iyisidir
(A) performansın artmasına gerçekten fayda olduğunu biliyorsunuz ve
(B) aslında daha yüksek performans sunacaktır.
(A) bir teknik problem değil, bir iş problemidir. Bir performans uzmanıysanız, genellikle koda bakıp (B) belirleyebileceksiniz, ancak akıllı yol ölçmektir. (Ve, (A) 'dan ikna olana kadar bile rahatsız etmeyin; kod yeterince hızlıysa, beyin döngülerinizi başka bir yere uygulamak daha iyidir.)
Paralellik için en basit performans modeli "NQ" modelidir, burada N eleman sayısıdır ve Q eleman başına hesaplamadır. Genel olarak, performans avantajı elde etmeye başlamadan önce NQ ürününün bir eşiği aşması gerekir. "1'den N'ye kadar sayıları topla" gibi düşük Q'lu bir sorun için, genellikle N = 1000 ve N = 10000 arasında bir kopuş göreceksiniz. Daha yüksek Q problemlerinde, daha düşük eşiklerde atılımlar göreceksiniz.
Ancak gerçek oldukça karmaşıktır. Uzmanlık elde edene kadar, önce sıralı işlemenin gerçekte ne zaman bir şeye mal olduğunu belirleyin ve paralelliğin yardımcı olup olmayacağını ölçün.