C / c ++ / fortran'a karşı petsc4py kullanmanın etkinliği


11

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:


11

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, petsc4pyPETSc 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.

petsc4pyDepo kendisi performans / esneklik dengeyi sergilemek için kullanılabilir bir dizi örnek bulunmaktadır. Bak petsc4pydenilen demo için kaynak deposunda perftestbir 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.f90bu 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.


Ben de küçük bir yapılandırılmamış kod wrt benzer bir endişe var. PETSc yalnızca veri yapılarını ve çözücüleri sağlar, ancak yine de mesh (4GB giriş dosyasına kadar), bölümleme, eşlemeler oluşturma, elemanlar üzerinde döngü, yerel (eleman) sertlik matrislerini vb. . Bu PETSc ile ilgili olmayan şeyler için özel olarak I / O, eşlemeler ve eleman seviyesi hesaplamaları için python daha yavaş olmaz. Çünkü kodun geri kalanı zaten basit.
stali

Eleman düzeyindeki hesaplamalar genellikle bir çekirdek olarak iletilir ( App.f90kaynağa bakın perftest). G / Ç'de performans farkı yoktur. Daha üst düzey bir paket için FEniCS'e baktınız mı?
Aron Ahmadia

Haklısın. Fikrimi anlıyorum ama benim özel durumumda, kodun yaklaşık% 90'ı olan bu tür birçok çekirdek (farklı tip elemanlar için şekil fonksiyonları, eleman seviyesi hesaplamaları, eşlemeler vb.) Vardır. Fenics'e bir süre önce baktım ve dış ağlarla uğraşmak ve BC'ler empoze etmek gibi birçok ayrıntı ilk bakışta oldukça net değildi veya daha karmaşık görünüyor (en azından benim için). Ayrıca, benim gibi CS olmayan kişiler için kullanımı oldukça kolay olan (mükemmel PETSc belgeleri göz önüne alındığında) Fortran kullanıyorum. Aslında python'dan daha kolay buluyorum :) işim için.
stali

7

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!

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.