Petsc4py vs c / c ++ / fortran ne kadar yavaş?
Ben önemli ölçüde yürütülmekte olan koda bağlıdır, ama bir matris-vektör ürün gibi basit bir şey hakkında ne fark?
Petsc4py vs c / c ++ / fortran ne kadar yavaş?
Ben önemli ölçüde yürütülmekte olan koda bağlıdır, ama bir matris-vektör ürün gibi basit bir şey hakkında ne fark?
Yanıtlar:
Bu, bilimsel programlama topluluğunda yaygın bir endişe kaynağıdır ve performans belirsizliğinin hesaplamalı bilimdeki en önemli "mitlerden" biri olduğunu düşünürüm.
As @fcruz tartışıyor, petsc4py
PETSc kitaplıklarına bir sarıcı, Python'da da PETSc bir reimplementation olduğunu. Bu nedenle, herhangi bir performans cezasının, dizileri PETSc'ye ve PETSc'den kopyalamaktan veya sürücü kodu / işlev çağrılarınızdaki ek yükten gelmesini bekleyebilirsiniz. petsc4py
çok dikkatli bir şekilde uygulanır venumpy
çok boyutlu dizi arayüzleri, kopya yükünü önleyebilirsiniz. Çalıştığım kullanım vakalarının çoğunda, Python'da çalışmanın performans cezası% 10-40 civarındadır ve genellikle bu performans vuruşunu telafi etmekten daha fazla başka şekillerde kazanırım. Aslında, konuştuğum birkaç daha deneyimli HPC Python geliştiricisi, bu performans farkının genellikle daha da azaltılabileceği görüşünü taşıyor ve Python, hesaplama açısından pahalı kodlar kullanıyorken, bu kesinlikle geçerli olacak.
petsc4py
Depo kendisi performans / esneklik dengeyi sergilemek için kullanılabilir bir dizi örnek bulunmaktadır. Bak petsc4py
denilen demo için kaynak deposunda perftest
bir Python sürücü ve (sağlanan bir Fortran çekirdeğin üzerinde C sürücüsü ikisini de kullanarak denklem doğrusal olmayan bir sistem çözer, App.f90
bu dizinde). Buradaki performans yükü% 10 mertebesinde.
Somut bir örnek olarak, paralel şebeke yönetimi için PETSc ve hücre arayüzlerindeki Riemann problemlerini çözmek için eski Fortran çekirdekleri ile arayüz oluşturan bir yazılım paketi olan PyClaw üzerinde çalışan bir bilim insanı ekibinin parçasıyım . Bir Fortran sürücüsünden geçiş yapmaktan kaynaklanan performans düşüşü konusunda oldukça dikkatli bir çalışma yaptık ve sonuçları konferans raporunda Tablo 1'de sayfa 5'in alt kısmında görebilirsiniz . Bizim durumumuzda, kodumuzu PETSc ve Fortran ile kolayca ilişkilendirebilme ve on binlerce çekirdeğe paralel olarak verimli bir şekilde çalışabilme yeteneği için biraz temel performansla işlem yaptık.
App.f90
kaynağa bakın perftest
). G / Ç'de performans farkı yoktur. Daha üst düzey bir paket için FEniCS'e baktınız mı?
Petsc4py acces PETSc ama sadece başka bir yoludur piton gelen söylemek aynı, ya da, petsc4py böylece piton gelen, paralel PDE çözücüleri geliştirme çabası azaltmak içindir PETSc veri yapılarını ve rutinleri erişebilir bağları sağlar (bu ölçek).
PETSc, çözücülerine çeşitli düzeylerde soyutlamalar sağlar ve hatta kendi çözücünüzü uygulamak için PETSc'yi bile kullanabilirsiniz. En düşük yazılım soyutlamasında PETSc, BLAS, LAPACK ve MPI kullanır ve en iyi ihtimalle bunların uygulanması kadar hızlı olacaktır.
Artık pets4py, PETSc'ye bağlamaları uygulamak için cython kullanıyor. Cython kullanmanın yükü, PETSc'den ne kadar hesaplama yapılacağına göredir. PETSc'den yüksek seviyeli PDE çözücüleri kullanırsanız, genel giderler onlar için endişelenmenize gerek kalmayacak kadar küçük olmalıdır.
PETSc ile GEMV'nin performans karşılaştırmasından daha önemli bir soru, PETSc'nin işiniz için doğru araç olup olmadığıdır. Önemsiz paralel PDE çözücüleri uygulamanız gerekiyorsa, büyük olasılıkla PETSc size gerçekten yardımcı olacaktır. Ancak, bir grup GEMV yapmanız gerekiyorsa, bir BLAS kütüphanesi istersiniz. İyi şanslar!