MPI_Allreduce()
MPI-2.2 standardının 5.9.1 Bölümünde yer alan aşağıdaki not göz önüne alındığında, aynı sayıda işlemci kullandığınız sürece kullanılarak uygulanan bir azaltma tekrarlanabilir.
Uygulayıcılara tavsiyeler . MPI_REDUCE
İşlev aynı argümanlara aynı sırada uygulandığında aynı sonucun elde edilmesi için aynı sonucun elde edilmesi şiddetle tavsiye edilir. Bunun, işlemcilerin fiziksel konumlarından yararlanan optimizasyonları engelleyebileceğini unutmayın. ( Uygulayıcılara tavsiyenin sonu .)
Her ne pahasına olursa olsun tekrarlanabilirliği garanti etmeniz gerekiyorsa, bir sonraki paragraftaki yönergeleri takip edebilirsiniz:
Kullanıcılara tavsiye . Bazı uygulamalar kayan nokta işlemlerinin ilişkisel olmayan yapısını göz ardı edemeyebilir veya özel bir azaltma sırası gerektiren ve ilişkilendirici olarak ele alınamayan kullanıcı tanımlı işlemleri (bkz. Bölüm 5.9.5) kullanabilir. Bu tür başvurular değerlendirme sırasını açıkça uygulamalıdır. Örneğin, sıkı bir soldan sağa (veya sağdan sola) değerlendirme emri gerektiren operasyonlar durumunda, bu, tüm işlenenleri tek bir işlemde (örn. İle) bir araya
MPI_GATHER
getirerek, azaltma işlemini uygulayarak yapılabilir istenen sırayla (örn. ile
MPI_REDUCE_LOCAL
) ve gerekirse sonucu diğer işlemlere (ör MPI_BCAST
. ile ) yayınlayın veya saçın . ( Kullanıcılara tavsiyenin sonu .)
Daha geniş bir şemada, çoğu uygulama için etkili algoritmalar yerellikten yararlanır. Algoritma, farklı sayıda işlemde çalıştırıldığında gerçekten farklı olduğundan, farklı sayıda işlemde çalıştırıldığında sonuçları tam olarak üretmek pratik değildir. Olası bir istisna, sönümlenmiş Jacobi veya polinom (örn. Chebyshev) düzleştiricilerle multigrid olup, bu basit yöntemin çok iyi performans göstermesi mümkündür.
Aynı sayıda işlemle, performansların, belirleyici olmamaya neden olan, alındıkları sırayla (örn. Kullanılarak MPI_Waitany()
) işlenmesi genellikle yararlıdır . Bu gibi durumlarda, iki varyantı uygulayabilirsiniz, hızlı olanı herhangi bir sırayla alır ve bir "hata ayıklama" statik bir sırayla alır. Bunun için, bu davranışı sunmak üzere temeldeki tüm kitaplıkların da yazılması gerekir.
Bazı durumlarda hata ayıklama için, bu yeniden üretilebilir davranışı sunmayan bir hesaplamanın bir kısmını izole edebilir ve bunu gereksiz bir şekilde gerçekleştirebilirsiniz. Bileşenlerin nasıl tasarlandığına bağlı olarak, bu değişiklik az miktarda kod veya çok müdahaleci olabilir.