İzin verin ve gereksinimlerinizi yıkın:
- İdame
- Metin verilerini okuma / yazma
- LU çarpanlara ayırma için güçlü arayüzler / kapasite
- Seyrek doğrusal çözücüler
- Büyük verilere performans ve ölçeklenebilirlik
Bu listeden aşağıdaki dilleri dikkate alırım:
C, C ++, Fortran, Python, MATLAB, Java
Julia gelecek vaat eden yeni bir dildir, ancak topluluk hala etrafında şekillenmektedir ve herhangi bir büyük yeni kodda konuşlandırılmamıştır.
Metin verilerini okuma / yazma
Bu, herhangi bir programlama dilinde kolayca elde edilebilir. G / Ç erişiminizi uygun şekilde arabelleğe aldığınızdan ve birleştirdiğinizden emin olun ve dikkate almanız gereken dillerden iyi bir performans elde edersiniz. Performansları nasıl kullanacağınızı bilmiyorsanız C ++ 'ta akış nesnelerinden kaçının.
LU çarpanlara ayırma için güçlü arayüzler / kapasite
Yoğun LU çarpanlarına ayırma işlemi yapıyorsanız, paralel işlevsellik için LAPACK veya ScaLAPACK / Elemental kullanmak istersiniz. LAPACK ve ScaLAPACK Fortran, Elemental C ++ ile yazılmıştır. Her üç kütüphane de performans sergiliyor ve iyi destekleniyor ve belgeleniyor. Bunlara, düşünmeniz gereken dillerden herhangi biriyle arayüz oluşturabilirsiniz.
Seyrek doğrusal çözücüler
Önceden serbestçe temin edilebilen seyrek doğrusal çözücülerin neredeyse tamamı , iyi belgelenmiş ve desteklenen C ile yazılmış PETSc aracılığıyla elde edilebilir . Dikkate almanız gereken herhangi bir dilden PETSc ile arayüz oluşturabilirsiniz.
Büyük verilere performans ve ölçeklenebilirlik
Bahsettiğiniz tek paralel programlama paradigmaları, paylaşılan bellek tabanlı, yani MPI tabanlı (mesaj geçiren), dağıtılmış bellek hesaplama yaklaşımını düşünmediğiniz anlamına gelir. Deneyimlerime göre, dağıtılmış bellek çözümü kullanarak bir düzine çekirdeğin ötesine ölçeklenen kod yazmak çok daha kolay. Hemen hemen tüm Üniversite "kümeleri" MPI tabanlıdır, büyük paylaşılan bellek makineleri pahalıdır ve buna bağlı olarak nadirdir. MPI'yı yaklaşımınız için düşünmelisiniz, ancak tavsiyem seçtiğiniz programlama paradigmasından bağımsız olarak geçerli olacaktır.
Düğüm üzerinde performans ile ilgili olarak, kendiniz sayısal rutinler yazıyorsanız, Fortran'da iyi seri performans elde etmek en kolay yoldur. C, C ++ veya Python'da biraz deneyiminiz varsa, çok benzer bir performans elde edebilirsiniz (C ve C ++, Fortran, Python ve MATLAB ile fazla çaba harcamadan yaklaşık% 25 zaman yükü ile gelir). MATLAB bunu bir JIT derleyicisi ve çok iyi doğrusal cebir ifadesi ile yapar. Python'dan talep edilen performansı elde etmek için muhtemelen Cython, numpy, numexpr veya gömülü sayısal çekirdekler kullanmanız gerekecektir. Java'nın performansı hakkında yorum yapamam, çünkü dili çok iyi bilmiyorum, ancak bir uzman tarafından yazılırsa bunun Python'dan uzak olmadığından şüpheleniyorum.
Arayüzler hakkında bir not
Umarım, düşündüğünüz programlama dillerinden herhangi birinde istediğiniz her şeyi yapabileceğinize ikna oldum. Java kullanıyorsanız, C arayüzleri biraz zorlayıcı olacaktır. Python, ctypes, Cython ve f2py aracılığıyla mükemmel C ve Fortran arayüz desteğine sahiptir. LAPACK zaten sarılmış ve scipy ile kullanılabilir. MATLAB, yerel kütüphanelerinde ihtiyaç duyduğunuz tüm işlevlere sahiptir, ancak kolayca ölçeklenebilir veya kümelerde çalıştırılması özellikle kolay değildir. Java, JNI ile C ve Fortran arabirimlerini destekleyebilir , ancak kümelerde ve bilimsel hesaplama için paralel yazılımlarda yaygın olarak bulunmaz.
İdame
Bunun birçoğu kişisel lezzete inecek, ancak sürdürülebilirlik konusundaki genel fikir birliği, yazılımınızdaki kod satır sayısını en aza indirmek, iyi tanımlanmış arabirimlerle modüler kod yazmak ve hesaplama yazılımı sağlamaktır. uygulamanın doğruluğunu ve işlevselliğini doğrulayan testler.
Öneri
Ben şahsen Python ile şans çok oldu ve birçok hesaplama projeler için tavsiye. Bence bunu projeniz için kuvvetle düşünmelisiniz. Python ve MATLAB muhtemelen bilimsel hesaplama için mevcut olan dillerden en ifadelidir. Python'u başka herhangi bir programlama diliyle kolayca arabirimleyebilirsiniz, mevcut Fortran uygulamanızı sarmak için P2hon'u kullanabilir ve işlevselliği koruduğunuzu doğrularken Python'da hangi parçaları istediğinizi yeniden parçalayabilirsiniz. Şu anda, resmi Python 2.7 uygulamasının scipy ile bir kombinasyonunu tavsiye ederim . Bu yığınla kolayca kullanılabilen Enthought Python Distribution'dan başlayabilirsiniz .
Bunların çoğunu C, C ++ veya Fortran'da da yapabilirsiniz. C ve C ++, çok fazla deneyime sahip profesyonel geliştiriciler için çok çekici dillerdir, ancak sıklıkla yeni geliştiricilere seyahat eder ve bu anlamda muhtemelen daha akademik bir kod için harika bir fikir değildir. Fortran ve MATLAB akademik hesaplamada popülerdir, ancak Python'un sunduğu gelişmiş veri yapıları ve ifade gücü bakımından zayıftır (örneğin bir Python dict nesnesini düşünün).
İlgili sorular: