Bilimsel hesaplama için geleneksel olmayan programlama dillerinin kullanılması [kapalı]


22

Not: Aşağıdaki yazı tartışmalı görüşler içerebilir, bu nedenle onların yalnızca benim görüşlerim olduğunu ve kimseyi rahatsız etmediğini unutmayın.

1999'dan beri bazı formlarda veya diğerlerinde programlama yapıyorum. İlk önce R'yi kullandım ve daha sonra 2004 civarında, çoğunlukla Python'a geçtim.

Birçok bilimsel uygulama için, örneğin, MCMC gibi şeyler de dahil olmak üzere simülasyon, hem R hem de Python çok yavaştır ve hızlandırılması gerekir. Bunu yapmanın genel yolu C veya C ++ ile genişletmektir. Hem R hem de Python için, R + 'nin C API'sini C ++ ve Python ile Boost Python kütüphanesini kullanarak yaptım.

Bununla birlikte, çeşitli nedenlerden dolayı, bu kombinasyon ideal bir çözüm değildir. Programlamada, özellikle algoritmalarda neler önemlidir? Tabii ki anlamlılık ve hız. Dil ne kadar etkileyici olursa, o kadar hızlı bir dilde yazabilirsiniz.

1) Dışavurumculuk söz konusu olduğunda, ne R ne de Python bence bilimsel algoritmalar yazmak için ideal değil. Temel algoritma ile yakından eşleşmiyorlar. Ancak, ikisi de C ++ 'dan oldukça iyidir.

2) Hoş bir dil olan Python'da yazmaktan zevk alıyorum, ancak yukarıda da belirtildiği gibi algoritmik çalışmalar için ideal değil. Ancak, hız sorunları nedeniyle bir Python / C ++ kombinasyonu ile çalışmak gerektiğinde, bu karışımla çalışmak önemli ölçüde daha az keyifli hale gelir. Genellikle olan şey ilk önce Python'da yazmam ve iyi çalışan bir şeye sahip olduğumda, genellikle çok yavaş olduğunu keşfedersiniz (çok yavaş bir öznel değer için). Daha sonra, makul olmayan miktarda zamanın C ++ ile yeniden yazılması ya da yavaşlığın giderilmesi için harcanması kararı ile karşı karşıyayım. Görme sıklığında, özellikle elde edilen hızlanmalar tahmin edilemez olduğu için yavaşlığa dayanarak daha iyi olabileceğimi hissediyorum. Ayrıca, ikisi arasındaki Boost Python arayüzü önemli bir bakım başağrısıdır, ve kodun birbirine çok farklı iki dilde yapıştırılmış olması, sadece rahatsız edicidir. Amaçlanan Boost Python'un eleştirisi yok, hayal edilebileceği kadar güçlü bir arayüz ve hemen hemen çoğu zaman işe yarıyor.

Şimdi, ideal bir dünyada, sınırsız zaman ve kaynaklarla, bu sorunların hiçbiri önemli bir şey olmayacaktı. Ancak üzerinde çalıştığım bilimsel projelerde şu deneyimi yaşadım.

Projede iş birliği yapsam da olmasam da, her zaman bilişimin büyük çoğunluğunu yapıyor gibi görünüyorum. Toplamda 5 önemli projede, sadece bir kişiden bir projede önemli bir katılım oldu. Bir kişi ağırlığını çekmekten daha fazlasını yaptı; o benden ya da daha fazlasını yaptı. Ancak, birden fazla ortak çalışan projeler de dahil olmak üzere diğer tüm durumlarda, neredeyse tüm hesaplama işlemlerini yaptım. En iyi işbirlikçilerle kutsanmadığımı söyleyebildiğim halde (tembellik ve yetersizliğin bir karışımı gibi görünüyor), bu durumun gelecekte değişip değişmeyeceği açık değil.

Hesaplamalı bilimsel çalışma muazzam bir çaba ve eğer işbirlikçilerimin davranış şeklini değiştiremezsem çalışma biçimimi değiştirebilirim. En önemli gelişme işleri daha çabuk halletmek olacaktır. Bu da beni burada ana düşünceye getiriyor, bu da dilleri daha az ortodoks bir şeye çevirmenin yardımcı olabileceği anlamına geliyor. Geçmiş araştırmalara göre, olasılık sırasına göre en olası adaylar Common Lisp ve Ocaml. Bu konuda yıllardır düşünüyorum, ama son zamanlarda daha ciddi bir şekilde düşünüyorum.

Söyleyebileceğim kadarıyla, çok az insan bilimsel hesaplama için CL veya Ocaml kullanıyor. Bu siteyi ararken CL'ye (biri benim) diğeri Ocaml'a (benim) iki referans buldum. Yıllarca, saçakta çalışan maceracı insanlarla birkaç cesaret verici temaslar yaşadım. 2008'de Peter Seibel'in "Uygulamalı Ortak Lisp" in (sahip olduğum) Tamas K. Papp tarafından bir kitap incelemesine rastladım . Bu dikkatimi çekti, çünkü Lisp için internette karşılaştığım birkaç bilimsel bilgi işlemden biriydi. Hemen yardımsever ve cesaret verici bir şekilde cevap veren Tamas'a yazdım. Ona alıntı yapmak

Programlama verimliliğim muhtemelen Lisp ile 10 kat arttı, ancak bu bir yıl sürdü ve hala öğreniyorum (2 ay sonra da oldukça iyi gidiyordum). Bu yüzden zaman açısından kritik bir şey üzerinde çalışıyorsanız, o zaman anahtarı erteleyin.

Milletvekillerine sormayı düşünmelisin, bu şeyleri bilen tek kişi ben değilim, diğerleri Lisp'te bilimsel bilgi işlem yapar.

Ayrıca bir blog ve GitHub sayfası var .

Kısaca yazdığım bir diğer kişi (Aralık 2006'da), Common Lisp'i radyasyon onkolojisi bağlamında kullanan Ira Kalet'ti .

Belki de Lisp hakkında bilimsel bilgi işlem yapan başkaları var, ama kimseyi tanımıyorum.

İnsanlarda CL ile ilgili en sık rastlanan problem kütüphane eksikliğidir. Bu genel amaçlı hesaplamada ciddi bir sorundur, ancak bilimsel hesaplamada, özellikle algoritmaların temelden uygulamalarından çok fazla olmayabilir. Spesifik olarak, olasılık dağılım fonksiyonları, çok boyutlu bir dizi kütüphanesi ve C ++ ve Python standart kütüphanelerinde bulunan harita, küme, liste vb.

Ocaml hakkında CL hakkında yaptığımdan daha az şey biliyorum ama bunu bir alternatif olarak attım. Sözde çok hızlı, Fransız araştırmacılar tarafından ücretsiz bir şekilde uygulandı ve ML'deki dil ailesinin bilimsel bilgi işlem için en uygun örneği gibi görünüyor.

Sonuç olarak, başkalarının bu konuda deneyime sahip olup olmadığını ve varsa, hangi düşünceleri olduğunu merak ediyorum.

EDIT: Yukarıda, daha önce tartıştığım konular bağlamında, ilk elden deneyim ile ilgileniyorum. Örneğin, Python ve C ++ (ya da R ve C ++) kullanıyor ve daha karanlık bir dile geçtiyseniz, en çok deneyimlerinizi duymak isterim.


2
Yığın değişimi, yaşam hikayeleri göndermek için değil, sorular sormak içindir! Sorunuz "Common Lisp veya OCaml kullanarak bilimsel bilgi işlem projeleri var mı?" Gibi görünüyor, değil mi?
Şubat'ta khinsen

4
Kabul, bu bir blog yazısı gibi biraz daha okur, ama ben öncül seviyorum. Bunu 2-3 paragrafa indirmeyi deneyebilir ve şansın var mı?
Aron Ahmadia,

1
Ayrıca kabul etti. Ana soruyu desteklediğinde yorum ve kişisel deneyim iyidir; çok fazla detay ana noktaları dışa aktarabilir. Sorunuzu sıkılaştırırsanız, okunmasının daha kolay olacağını ve daha hedefli ve daha kaliteli tepkiler alacağını düşünüyorum.
Geoff Oxberry,

1
@FaheemMitha: "İdeal dünya" da, orta yoldan bahsettiğin her şey elle optimize edilmiş montaj olurdu ... Bana kasvetli geliyor!
meawoppl

3
@FaheemMitha: Sorunuzu geliştirmek için yapabileceğiniz en iyi şey, sorduğunuz soruyu netleştirmektir. Görünüşe göre deneyimleriniz hakkında bir hikaye anlatıyorsunuz (ki sorun değil) ve sonunda soruyu hikayenizin sonunda bir ifade olarak gömüyorsunuz. ("Sonuç olarak, merak ediyorum ...") Yapabileceğiniz en iyi şey, bu bölümü bir soru yapmaktır, böylece sorunuzu kaçıran insanlar ne sorduğunuzu kolayca belirleyebilir. Bunu çözmek için birkaç kez geri gitmek zorunda kaldı.
Geoff Oxberry,

Yanıtlar:


18

Biz geliştirdik Julia için tam kaldırdı nedenlerle. C / Fortran'da kodunuzun bölümlerini yeniden yazmanıza gerek kalmaması için yeterince iyi performans gösteren iyi bir üst düzey bilimsel bilgi işlem dili yoktu. Julia'nın tasarımının bir miktar lisp etkisi vardır, bu nedenle ortak çalışanlarınız işlevsel parçalara aldırış etmiyorlarsa bir matlab veya R gibi davranabilirler. Dezavantajı ise dilin yeni olması ve günlük kullanım için ihtiyaç duyacağı tüm kütüphanelere sahip olmaması.

Mark, nasıl harcayacağımızı görmek için kriterinize Julia'yı eklemek isterim. Posta listemize atlayın ve julia'da görmek istediğinizi bize bildirin, böylece sizin için daha faydalı olacaktır.


Bu güzel görünüyor! Bunu kesinlikle kendi işim için kontrol edeceğim. Şu anda teorik yoğunlaştırılmış maddede tüm çalışmalarım için python kullanıyorum, çünkü hızlı C ++ kodu ile kazanılan zaman, ilk başta C ++ ile yazılan zamandan
mahrum kalıyor

9

Programlama dillerinin hızı, boyutu ve güvenilirliği, "sorunuz" ile ifade edilen birçok farklı kaygının üstesinden gelmek için gerçekten iyi bir iş yapıyor. 33 dilde aynı kriterlerin bir demet uygulamasının hızını ve kod tabanı boyutunu karşılaştırır!

Temelde bir Python aşığı oldum, çünkü programlamanın fazla zamanından fazla hesaplama süresine sahip olmak çok daha yaygın. CPU çevrimlerini israf etmeye istekli olduğumdan daha ilginç bir şeye ayrılabilecek bir zaman dilimini feda etmekten daha fazlasıyım.

Ayrıca, Julia'da +1. Sanırım biraz daha istikrarlı ve yaygın olarak desteklendiğinde, yani standart modüller yapmayı sevdiğim işler için sarıldığında, ona geçebileceğimi düşünüyorum.


4

OCaml'ın bilimsel uygulamaları için, bakınız örneğin

Bilimde Lisp için, örneğin bakınız

Çok daha fazla referans olduğuna eminim. Bununla birlikte, hesaplamalı çalışmanın OCaml veya Lisp'te yapıldığı herhangi bir büyük araştırma projesinden söz edemem. İkisinden birini seçmek, göreceli yalıtımda çalışmak anlamına gelir.

Açıkça Lisp etkileri olan, şu anda geliştirilmekte olan bilimsel hesaplama için yeni bir dil olan Julia ile de ilgilenebilirsiniz .


1
Belki de daha çok ilk elden deneyim ile ilgilendiğimi açıkça belirtmeliydim. Bunu yansıtmak için sorumu düzenleyeceğim.
Faheem Mitha
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.