“Julia” bilimsel bilgi işlem dili projesi ne kadar olgun?


55

Şu anda kullandığım C ++ ve Python'un (kısmi) yerine, sayısal / simülasyon modelleme projeleri için kullanılacak yeni bir dil öğrenmeyi düşünüyorum. Ben rastladım Julia mükemmel gibi geliyor. O iddia şeyi yaparsa, ben C ++ hem değiştirmek için kullanabilir ve bu (PyPlot dahil) yanı sıra C'ye benzer bir hızda döngüler için çalışan üst düzey bilimsel işlem kütüphane kodunu erişebilir beri, bütün projelerinde Python Diğer dillerden hiçbirinde bulunmayan uygun koroinler gibi şeylerden de faydalanacağım.

Ancak, şu anda 0.x sürümünde nispeten yeni bir proje ve geçmişte günlük kullanıma hazır olmadığına dair çeşitli uyarılar (geçmişte çeşitli tarihlerde gönderildi) buldum. Sonuç olarak, şahsen bu dili öğrenmek için zaman harcamayı düşünmem gerekip gerekmediğini değerlendirmeme yardımcı olmak için şu anda projenin durumu hakkında (Şubat 2014 veya bir cevap verildiğinde) bazı bilgiler istiyorum.

Julia projesiyle ilgili spesifik gerçeklere odaklanan cevapları takdir ediyorum ; Diğer projelerle ilgili deneyime dayanan görüşlerimle daha az ilgileniyorum.

Özellikle, Geoff Oxberry tarafından yapılan bir yorum, Julia API'nin hala değişken bir durumda olduğunu ve kodun değiştiğinde güncellenmesini gerektirdiğini öne sürüyor. Bunun ne ölçüde olduğu hakkında bir fikir edinmek istiyorum: API'nin hangi alanları istikrarlı, hangileri değişebilir?

Sanırım genelde daha çok lineer cebir (örn. Öz problemleri çözme), ODE'lerin birçok değişkenle sayısal entegrasyonu ve PyPlot ve / veya OpenGL ile komplo yapmanın yanı sıra düşük seviye C-tarzı sayı kırma (örneğin Monte Carlo simülasyonları için) yapıyor olurdum. ). Julia'nın kütüphane sistemi bu alanlarda tamamen gelişmiş mi? Özellikle, API bu tür faaliyetler için az çok kararlı mı, yoksa eski kodumun Julia'nın yeni bir sürümüne yükselttikten sonra kırılma eğiliminde olduğunu bulur muyum?

Son olarak, şu anda Julia'yı ciddi işler için kullanıp kullanmamaya karar vermede dikkate alınması gereken başka konular var mı?


2
Bu soru, öznel olduğu için Stack Exchange formatına uygun olmayabilir. Julia'da aktif olarak gelişen bazı insanları tanıyorum, seviyorum ve asal zaman için tamamen hazır olduğunu düşünüyorum (Julia API'deki değişikliklere cevaben kod tabanınızı güncellemeye istekli olduğunuz sürece). Şu anda Julia'yı kullanma gereği duymayan başka insanlar da var (benim gibi).
Geoff Oxberry

1
Öznel olmak, kendi başına Stack Exchange formatı için uygun olmayan bir soru yapmaz - bkz. Blog.stackoverflow.com/2010/09/good-subjective-bad-subjective . Sübjektif sorulara karşı bir site politikanız varsa, özür dilerim. Bununla birlikte, sadece biraz öznel olduğunu düşünüyorum : Zaten yorumunuz soruyu sormadan önce durum hakkında daha iyi bir fikir veriyor. Bir yabancının bir projenin ne kadar olgun olduğu konusunda kabaca bir fikir edinmesi bile çok zor olabilir.
Nathaniel,

API değişiklikleriyle ilgili düşünceniz benim için oldukça önemli görünüyor, bu yüzden özellikle bununla ilgili ayrıntıları isteyen soruya bir paragraf ekledim. Julia'nın güncellenmesi eski kodumu bozma eğiliminde olursa, bu aşamada benim için biraz zorlayıcı olabilir.
Nathaniel,

"Kötü öznel karşı iyi öznel" (kesinlikle en sevdiğim Stack Exchange blog yazılarından biri) konusunda kesinlikle haklısın; Yorum gönderdim çünkü cevabı görmeyi bekliyorum. Bunlarla "_____ hakkında ne düşünüyorsun?" sorular, cevaplar, çok iyi düşünülmüş birkaç mesajla sınırlanabilir ya da her yerde yayılır, tekrarlanır "ben de!" gönderiler. Eski harika; İkincisi değildir, bu yüzden size nezaket gösterecek bir nezaket veriyorum: Bakalım bunun nasıl bir oyun oynadığı.
Geoff Oxberry

3
Bir ödül gönderdiğiniz için teşekkürler, @AntonMenshov. Julia'nın 1.0 sürümünü geçtiğini (2014'te bunu gönderdiğimde yapmadı) geçtiğini ve bu nedenle güncel bir cevabı bulmanın çok iyi olacağını unutmayın.
Nathaniel

Yanıtlar:


43

Julia, bu noktada (Mayıs 2019, Julia v1.1 v1.2 ile birlikte ortaya çıkacak) bilimsel hesaplama için oldukça olgun. V1.0 sürümü , yıllık kod kırılmasına bir son verdi . Bununla birlikte, birçok bilimsel bilgi işlem kütüphanesi, bozulmadan büyümek için zaman buldu. Julia paketlerine genel bir bakış pkg.julialang.org adresinde bulunabilir .

Çekirdek bilimsel hesaplama için DifferentialEquations.jl diferansiyel denklemler (ADDlerin, SDEs, Daes, TDYU, Gillespie simülasyonları, vb), kütüphane Flux.jl sinir ağları ve atlamayı matematiksel programlama (optimizasyon için kütüphane: doğrusal, kuadratik, karışık tamsayı, vb programlama) bilimsel bilgi işlem ekosisteminin temel taşlarından biridir. Özellikle diferansiyel denklem kütüphanesi çok daha gelişmiş aşağıdaki gibi özelliklerin uygulanması büyük geliştirme ekibi ile, diğer dillerde görecekleriniz daha EPIRK entegratörleri , Runge-Kutta-Nystrom , Stiff / Diferansiyel-Cebirsel gecikme diferansiyel denklem veadaptif zaman sert stokastik diferansiyel denklem entegratörleri, bitişik duyarlılık analizi , kimyasal reaksiyon DSL'leri , matrissiz Newton-Krylov ve tam (veri aktarımı gerektirmeyen) GPU uyumluluğu gibi bir dizi diğer özelliğin yanı sıra sinirsel diferansiyel denklemlerin eğitimi ile harika kıyaslama sonuçları (feragatname: Ben öncü geliştiriciyim).

Olgunlaşmış Julia ekosistemi hakkında biraz akıl almaz olan şey, onun birliğidir. Temel olarak, birisi DifferentialEquations.jl'deki gibi genel bir kütüphane işlevi oluşturduğunda, anında yeni kod üretmek için herhangi bir AbstractArray / Number türünü kullanabilirsiniz. Örneğin, hata yayılımı için bir kütüphane var ( Measurements.jl ) ve onu ODE çözücüsüne yapıştırdığınızda, parametre örneklemesi olmadan hata yayılımı yapan yeni bir ODE çözücüsü sürümünü otomatik olarak derler . Bu nedenle, özelliklerin kodu kendisini ürettiği için belgelenen bazı özellikleri bulamayabilirsiniz ve bu nedenle kütüphane kompozisyonu hakkında daha fazla düşünmeniz gerekir.

Kompozisyonun en faydalı olduğu yollardan biri doğrusal cebirdir. Örneğin ODE çözücüler jac_prototype, dahili olarak kullanılacak Jacobian için tip belirtmenize izin vererek belirlemenizi sağlar . Tabii şeyler var LineraAlgebra standart kütüphanesinde gibi Symmetricve Tridiagonalsiz tip jenerik algoritmalarda composibility faydası, insanlar çoktan gitmiştir ve tüm dizi tipi kitaplıklar inşa verilen buraya kullanabilirsiniz ancak. BandedMatrices.jl ve BlockBandedMatrices.jl , hızlı luaşırı yüke sahip (Block) bantlı matris türlerini tanımlayan , kısmi diferansiyel denklem sistemlerinin sert MOL ayrıklaştırmaları çözümünü hızlandırmak için iyi bir yol yapan kitaplıklardır . PDMats.jlpozitif-kesin matrislerin tanımlanmasına izin verir. Elemental.jl , dağıtılmış bir seyrek Jacobian tanımlamanızı sağlar. CuArrays.jl , GPU'daki dizileri tanımlar. Vb.

O zaman tüm numara türlerin var. Unitful.jl derleme zamanında birim kontrolünü yapar, bu nedenle genel gidersiz birimler kütüphanesidir. DoubleFloats.jl , Quadmath.jl ve ArbFloats.jl ile birlikte hızlı ve daha yüksek hassasiyetli bir kütüphanedir . ForwardDiff.jl , Dual sayı aritmetiği kullanan ileri mod otomatik farklılaştırma için bir kütüphanedir. Bunları listelemeye devam edebilirim. Ve evet, bu sayı türleri için özel olarak optimize edilmiş bir sürümü derlemek için bunları yeterince genel Julia kütüphanelerine atabilirsiniz. ApproxFun.jl gibi bir şey bilecebirsel nesneler (Chebfun gibi) olarak işlev gören bu jenerik sistemle çalışır ve PDE'lerin bir fonksiyon uzayındaki skalerlerde ODE'ler olarak tanımlanmasına izin verir.

Kompostibilitenin avantajları ve türlerin jenerik Julia fonksiyonları üzerinde yeni ve verimli kodlar üretmek için kullanılabileceği düşünüldüğünde, çekirdek bilimsel hesaplama işlevselliğinin saf Julia'ya uygulanmasını sağlamak için birçok çalışma yapılmıştır. Optim.jl doğrusal olmayan optimizasyon için, NLsolve.jl doğrusal olmayan sistemlerin çözümü için, IterativeSolvers.jl lineer sistem ve eigensystems yinelenen açarlarını, BlackBoxOptim.jl kara kutu optimizasyonu, vb Hatta sinir ağı kütüphanesi için Flux.jl sadece CuArrays kullanır. jl'nin GPU yetenekleri için GPU'ya otomatik kod derlemesi. Bu beste, DiffEqFlux.jl'deki nöral diferansiyel denklemler gibi şeylerin yaratılmasının özü oldu.. Turing.jl gibi olasılıksal programlama dilleri de şimdi oldukça olgunlaşmış ve aynı temel kalıptan faydalanıyor.

Julia'nın kütüphaneleri temelde kod üretme araçlarına dayandığından, kod üretme konusunda çok fazla alet bulunmasına şaşırmamak gerekir. Julia'nın yayın sistemi , yukarıda belirtilen özelliklerin çoğunu vermek için dizi tipleri tarafından aşırı yüklenmiş , sinek üzerinde kaynaşık çekirdekler üretir . CUDAnative.jl , Julia kodunu GPU çekirdeklerine derlemeye izin verir. ModelingToolkit.jl matematiksel kodu dönüştürmek için AST'leri otomatik olarak sembolik bir sisteme dönüştürür. Cassette.jlDerleme zamanından önce işlevlerini değiştirmek için kuralları kullanarak (örneğin: tüm dizi tahsislerini statik dizi tahsislerine değiştir ve işlemleri GPU'ya taşı) kuralları kullanarak bir başkasının mevcut fonksiyonunu "geçersiz kılmanıza" izin verir. Bu daha gelişmiş bir takımlamadır (herkesin bilimsel hesaplama yapmasını beklediğini derleyiciyi doğrudan kontrol altına almasını beklemiyorum), fakat bu, gelecek nesil takımların çoğunun nasıl yapıldığını (ya da daha doğrusu özelliklerin kendilerinin nasıl yazdığını).

Paralelliğe gelince, GPU'lardan bahsetmiştim ve Julia yerleşik çoklu okuma ve dağıtma bilgisayarları kullandı . Julia'nın çok iş parçacığı çok yakında yuvalanmış çok iş parçacığın otomatik olarak programlanmasına olanak sağlayan paralel görevli bir çalışma zamanı (PARTR) mimarisini kullanır . MPI kullanmak istiyorsanız, sadece MPI.jl kullanabilirsiniz . Ve tabii ki, hepsini kullanmanın en kolay yolu, paralelliği işlemlerinde kullanmak için yalnızca AbstractArray tipi bir kurulum kullanmaktır.

Julia ayrıca, bilimsel uygulamalar için kullanılan genel amaçlı bir dilden bekleyeceğiniz temel bir ekosisteme sahiptir. Kesme noktaları olan dahili bir hata ayıklayıcısına sahip Juno IDE'ye sahiptir, her türlü araziyi yapmak için Plots.jl vardır . Bir çok özel araç da güzel, Revise.jl gibi bir dosya kaydedildiğinde işlevlerinizi / kütüphanenizi otomatik olarak günceller. DataFrames.jl , istatistik kitaplıkları vb . Var . En güzel kitaplıklardan biri aslında dağıtım için genel algoritmalar yazmanıza izin veren , aslında Distributions.jl'dir (örneğin:rand(dist)hangi dağılıma ne olursa olsun rastgele bir sayı alır) ve tek değişkenli ve çok değişkenli dağılımların tam bir yükü vardır (ve elbette gönderme derleme zamanında gerçekleşir, bu da hepsini dağıtıma özgü bir fonksiyon kodlaması kadar hızlı yapar). Bir sürü veri işleme aracı , web sunucusu vb. Var . Bu noktada, temel bir bilimsel şey varsa ve bunun olmasını beklediğiniz takdirde, sadece Google’ın .jl veya Julia ile birlikte ortaya çıkması ve ortaya çıkması yeterince olgunlaşır.

O zaman ufukta akılda tutulması gereken birkaç şey var. PackageCompiler , Julia kütüphanelerinden ikili dosyalar oluşturmak istiyor ve zaten bazı başarılara sahip fakat daha fazla gelişmeye ihtiyacı var. Makie.jl GPU hızlandırmalı etkileşimli bir çizim için bütün bir kütüphanedir ve hala biraz daha çalışmaya ihtiyacı var ama gerçekten Julia'daki ana komplo kütüphanesi olmak istiyor. Zygote.jl , izleme tabanlı bir AD'nin (Flux's Tracker, PyTorch, Jax) performans sorunlarına sahip olmayan ve tüm saf Julia kodları üzerinde çalışmak isteyen, kaynaktan kaynaktan otomatik bir farklılaşma kütüphanesidir. Vb.

Sonuç olarak, birçok yerde çok fazla hareket bulabilirsiniz, ancak çoğu alanda zaten sağlam bir olgunlaşmış kütüphane bulunmaktadır. Artık “kabul edilecek mi?” Diye sorduğunuz bir yerde değil: Julia, etrafta iyi kalmak için ivme kazanması için yeterince insan (milyonlarca indirme) tarafından benimsendi. Gerçekten hoş bir topluluğu var, bu yüzden esintiyi çekmek ve paralel hesaplama veya sayısal diferansiyel denklemler hakkında konuşmak istiyorsanız, bunun için en iyi sohbet odalarından bazıları Julialang Slack'de . Öğrenmeniz gereken bir dil olup olmadığı kişisel bir sorudur ve projeniz için doğru dil olup olmadığı teknik bir sorudur ve bunlar farklıdır. Fakat bu, büyük bir tutarlı geliştirici grubunun desteğini alan ve olgunlaşan bir dil midir? Bu olumlu bir evet gibi görünüyor.


2
Mükemmel cevap. Bir soru: Julia, araştırma kodundan üretim sistemlerine kadar zarif bir evrime izin veriyor mu? Yoksa daha fazla umudun olmadığı matlab gibi mi?
kullanıcı14717,

6
DifferentialEquations.jl gibi bir çok paket, bir araştırma projesi için kod olarak başladı . Julia'nın paketleme sistemi, gelecekteki bakım için çalışma kodunu CI ve birim testleri ile bir pakete dönüştürmeyi oldukça kolaylaştırır. Ve çoğu kodun saf olması, Julia'yı çok daha kolay bir hale getirir çünkü bir sürü yapı sistemi / ikili dosya bulundurmanız gerekmez. Bu yüzden kesinlikle evet derdim. Yakında serbest bırakılacak bazı özel kodlarımız var. Hala eksik olan tek şey ikili dosyalar oluşturmaktır (PackageCompiler).
Chris Rackauckas

29

Olmazsa, tekrar düşünmeden önce ne kadar beklemem gerektiğine dair kaba bir büyüklük sırası tahmini vermek mümkün müdür?

Hesaplamalı bilim dillerinin olgunlaşmasının ne kadar sürdüğü konusundaki kaba, büyüklük sırası tahminim on yıl civarında.

Örnek 1: SciPy 2001'de başladı. 2009'da, Scipy 0.7.0 piyasaya sürüldü ve ODE entegratörünün VODE'ye ( ode15skabaca eşittir ; ode15sNDF tabanlı, VODE BDF / Adams-Bashforth'a eşdeğer) eşdeğeri bir arayüze sahipti . SciPy 0.10.0 ile, dopri5kabaca MATLAB'lerin eşdeğeri olan bir arayüz , ode45genellikle mezun olanlara ilk pratik sayısal entegrasyon yöntemi olarak sunulan bir Runge-Kutta 4. derece yöntemine bir arayüzdür . SciPy 0.10.0, Aralık 2011'de piyasaya sürüldü ve bildiğim her mühendislik dalında tanıtılan bir MATLAB özelliğini dahil etmeleri yaklaşık 10 yıl sürdü.

Örnek 2: Mathworks 1984 yılında kuruldu. İlk sürümlerinde, JACKPAC adlı C'ye bir LAPACK portu kullandılar (JackW, sonra onu yazan bir MathWorks mühendisi). 2000 yılına kadar LAPACK ile değiştirmediler.

Julia daha az zaman alabilir, ancak kuruluştan ana akım olmaya kadar yaklaşık 10 yıl tahmin ediyorum. (Zaten bir yıl ya da öylesine çıktı; belki 9-10 yıl sonra?)

Julia'nın kütüphane sistemi bu alanlarda tamamen gelişmiş mi? Özellikle, API bu tür faaliyetler için az çok kararlı mı, yoksa eski kodumun Julia'nın yeni bir sürümüne yükselttikten sonra kırılma eğiliminde olduğunu bulur muyum?

Julia'yı kullanmıyorum, o yüzden söylediklerimi bir miktar tuzla alın, çünkü sadece Jeff Bezanson'un Julia hakkındaki sunumlarını yaptığını gördüm. C, Python ve Fortran kütüphanelerini birbirine bağlamayı ve kullanmayı kolaylaştırmak için geriye doğru eğildiler. İstediğinizi yapan bir Julia kütüphanesi bulamazsanız, daha geniş bir dilde bir kütüphaneye yönelik bir Julia shim yazın. Sonuç olarak, kütüphane eksikliğinin bir endişe kaynağı olacağını sanmıyorum. Bence, ana dil özelliklerinde yapılan değişikliklerin sizi kıçınıza sokmadığından emin olmaktan endişe duyacağımı düşünüyorum. Julia Git deposundaki kilometre taşlarına bakarsanız, "breaking" etiketinin biraz kullanıldığını göreceksiniz (0.2 sürümde 12 kez, 0.3 sürümde 5 kez). Bana göre, bu ana dilin hala gelişmekte olduğunu gösteriyor, bu yüzden şu an için dili kullanmakta tereddüt ediyorum.

EDIT: Aurelius iyi bir noktaya getiriyor:

Julia'nın aslında ana akım olacağını ve sadece diğer birçok dil gibi gizlilik içinde ölmeyeceğini varsaymanıza neden olan şey nedir? SciPy / numpy, Julia'nın sahip olmadığı sürekli büyüyen bir python topluluğunun desteğine sahipti.

Orijinal cevabımda, "Julia ana akım olmayı başarabilir mi?" Sorusundan kaçınmaya karar verdim. mümkün olduğu kadar. Başarısızlık kolaydır; başarı zor. Julia'nın en iyi karşılaştırmasının MATLAB, R ve Octave gibi teknik hesaplama dilleri olduğunu düşünüyorum. HPC dilleri (Chapel, Fortress, UPC, vs.) teknik hesaplama dillerinden daha dar bir kitleye sahiptir ve genel amaçlı diller (C, Python, C ++ vb.) Teknik hesaplama dillerinden daha geniş bir kitleye sahiptir.

Julia'nın yardım edebileceğini düşündüğüm bir şey ifade gücünden ödün vermeden performans için tasarım. Julia, C gibi derlenmiş dillerle MATLAB, R ve hatta Python'dan daha rekabetçidir. Bu tasarım hedefi, insanları aşağıdaki dillerden çekebilecek bir özelliktir, örneğin:

  • Performansı çok önemseyen ve C ve Fortran gibi dillerden gelen insanlar, derlenmiş dilden daha az sayıda yorumlanmış dilden (REPL ile birlikte) daha küçük bir performanstan (belki de 2ish'in bir faktörü) vazgeçmeye isteklidirler. daha hızlı gelişme ve test).
  • Üretkenliği önemseyen ve Python, R ve MATLAB gibi dillerden gelen ancak daha fazla performans isteyen insanlar. Uygulamaya gelince, saf Python, saf MATLAB ve saf R yavaştır. Bu dillerdeki geliştiriciler, derlenmiş dillerdeki kütüphaneleri sarma yolundan çıktı, ancak her şeyi saramazsınız ve bir noktada, ana dil sizi yavaşlatacak. Çekirdek Julia daha hızlı, bu da daha fazla bilim daha hızlı yapmanıza olanak sağlar.
  • Özgür yazılımı önemseyen insanlar. Julia yorumlanır ve özgürdür (Python, Octave, vb.); MATLAB değil.

Julia da paralelliği kolaylaştırmaya çalışıyor; Bu noktayı genişletmek için kendimi çok yetenekli hissetmiyorum ve dilin temel çekişi olduğunu düşünmüyorum, ancak bunun üzerinde çalıştıkları bir satış noktası olduğunu düşünüyorum ve umarız diğerleri buna ışık tutabilir.

Bununla birlikte, kendi taraflarındaki teknik değere sahip olsalar bile, dil yaratıcıları dili tanıtmak ve evangelize etmek için gerekli çalışmaları yapmak zorundadırlar. Jeff Bezanson, Alan Edelman, Stephen Karpinski ve Viral Shah dili başarılı kılmak için çok çalışıyorlar. Alan Edelman, bilgisayar bilimleri topluluğuyla derin bağlara sahiptir ve daha önce dil düzeyinde projeler üzerinde çalışmıştır (özellikle MATLAB'a Yıldız-P uzantısı). Jeff Bezanson, konferans devresini Julia'yı bir süredir hesaplamalı bilim insanlarına ve mühendislere tanıtmak için yapıyor. MIT'de, Julia'ya kütüphaneler ekleyerek katkıda bulunmak üzere öğrenci ve personel (özellikle de Steven G. Johnson) yetiştirmek için iyi bir iş yapıyorlar. Wired'da bir makaleleri var ve yalnızca bir yıl sonra kendileri için bir Wikipedia makalesi almayı başardılar. Git deposunda binlerce yıldız, yüzlerce çatal var. ve yüzlerce saat, bu nedenle açık kaynaklı standartlara göre, projeleri başarılı oldu. Bence onlar şu ana kadar doğru olan her şeyi yaptılar, bu yüzden bu çabayı sürdürme ve toplumu kurma meselesi. Hala başarısız olabilirler, ancak bu noktaya gelmek bana başarılı olma şansları olduğunu gösteriyor.


Julia'nın aslında ana akım olacağını ve sadece diğer birçok dil gibi gizlilik içinde ölmeyeceğini varsaymanıza neden olan şey nedir? SciPy / numpy, Julia'nın sahip olmadığı sürekli büyüyen bir python topluluğunun desteğine sahipti. Beni yanlış anlamayın, C ++ / Python / Fortran / Matlab'dan daha iyi bir araca sahip olmayı çok isterdim (ve Julia hakkında hiçbir şey bilmiyorum), ancak yeni HPC dillerinde başarısız olan birçok girişimde bulunuldu.
Aurelius

3
Kırılma değişiklikleriyle ilgili olarak , bir yıldan fazla bir süre önce 0.1'ten bu yana çok az sayıda kırma dili değişikliği (sözdizimi, anlambilim) olmuştur - aslında, herhangi bir şey düşünemiyorum - ana dil oldukça kararlıdır. "Kırma" olarak etiketlenen konular standart kütüphane API'lerinde yapılan değişikliklerdir. Bunları, eski kodunuzun hala çalışmasına izin veren ancak bir uyarı yazdırabilen amortisman yöntemleri bırakarak halletmesi oldukça kolaydır. Paketler çok daha fazla akıĢta olduğundan, bu noktada asıl mesele, dilin bir şeyleri bozmasa bile paketlerinizi yükseltmenin kodunuzu kırabileceğinden şüpheliyim.
StefanKarpinski

Düzenleme için teşekkürler Geoff, iyi girdi. Umarım daha iyi bir şeyler başarır. Haftada bir, algıların hızlı prototiplenmesi için Matlab'ı, otomasyon / komut dosyası için python'u ve "ciddi" iş için C ++ ve / veya Fortran'ı kullandığımı düşünmek biraz sapkın, ama içinde yaşadığımız dünya bu. " ne yazık ki olsa karamsar m. HPC'deki 5-10 yıllık eğilim heterojen programlama ve büyük paralelliktir ve bu basit bir dil oluşturmak için doğal olarak zordur. Yokuş yukarı savaşları birçok nedenden dolayı çok dik bir gradyandır.
Aurelius

Harika analiz HPC için yaptığınız her şeyin her zaman biraz kırıldığını söylemeye çalıştım. Yapma / kırma kurs için eşit olduğu bir yenilik alanı. Julia'nın bunun için pek çok güzel şeyi var, ancak bence birçok püf noktası LLVM entegrasyonundan geliyor, yine oldukça hareketli bir hedef. Biraz öğrenirdim, ancak günden güne kullanmasını bekleyene kadar birkaç yıl verin.
meawoppl

21

Julia'nın öğrenmeye değer olduğuna inanıyorum. Birkaç araştırma sonlu eleman kodu üretmek için kullandım ve çok hızlı bir şekilde ürettim. Her şeyden çok, deneyimimden memnun kaldım.

Julia benim için diğer dillerle ulaşmayı zor bulduğum bir iş akışı sağladı. MATLAB gibi bir prototip dili olarak kullanabilirsiniz, ancak bir çalışma kodunuz olduğunda ve hızlandırmak için yineleme profillerinden geçerken MATLAB'ın aksine, sıcak noktaları C koduyla değiştirmek ağrısızdır. Tasarımda C (ve Python) ile arayüz oluşturmayı bir öncelik haline getirmişlerdir.

Böylece dil matematiksel formülasyonlarımdan fonksiyonel koda ve sonra fonksiyonel koddan yüksek performanslı koda çok hızlı bir şekilde geçiş yapmamı sağladı. Julia'nın bu özelliğinin yetersiz olduğunu düşünüyorum ama çok büyük değer katıyor.

Birçok durumda, işlevsel bir sonlu eleman kodu ürettikten birkaç saat sonra C performansı (kendi C koduma göre) elde ettim. Şimdiye kadar sadece Julia özelliklerini kullanırsam, genellikle C'den 3 kat daha yavaş alıyorum. Bundan sonra sıcak noktaları C işlevleriyle değiştiriyorum (Julia bunları tanımlamaya yardımcı olmak için bir yığın örnekleme profilleyici ile birlikte geliyor). Genellikle bu, rahatsız edici sıcak nokta kod satırlarının yalnızca "ccall" ile değiştirilmesini gerektirir, Julia herhangi bir marşaltasyona müdahale eder.

Sanırım şu anda Julia'nın eksik olan ana şeyleri daha büyük projeler için düşünmekten çekinmeme rağmen, tam olarak desteklenmiş bir hata ayıklayıcısının olmaması ve komplo için zayıf destek (şu anda komplodaki en iyi bahis aslında sadece matplotlib'e bir arayüz. daha sık kırıldığımı). Kodla ilgili derhal geri bildirim gerçekten önemlidir. Ayrıca interaktif hata ayıklama olmadan nasıl hayatta kalacağımı da bilmiyorum ve bu konuda MATLAB ve GDB tarafından çok şımartıldım.


Teşekkürler, bu çok yararlı bir cevap. Bazı takip sorum var. Öncelikle, yayımlanmış bir sürümü kullanıyor musunuz veya kaynağa ayak uyduruyor musunuz? İkincisi, güncellemelerden dolayı kod kırma ile ilgili birçok sorunla karşılaşıyor musunuz? İkincisi, matplotlib arayüzü tam olarak nasıl "bozulur"? Grafiğin matplotlib'den geçtiğini duyduğum için çok heyecanlıydım, çünkü LaTeX'i eksen etiketlerinde (gerçek bir LaTeX, bir TeX kurulumunu kullanarak) oluşturabiliyordu ve bu benim için katil bir özellik. Ama eğer arayüz lapa lapa ise o zaman o kadar da iyi değil ...
Nathaniel

Kaynağa ayak uyduruyorum çünkü aynı zamanda projeye katkıda bulunmaya çalışıyorum. Şimdiye kadar hiç mola vermedim, ancak çok fazla yazı ve teoriye sahiptim ve koduma geri dönüyorum ve bunun nasıl olacağını göreceğiz. Numpy dizileri varsayılan olarak 0 indeksli ve satır büyüklüğüdür. ve Julia varsayılan olarak 1 indeksli ve sütun anadır, genellikle bu problem çıkarmaz ancak yapılandırılmamış veri komploları, indeks dizilerinin etrafından geçirilmesini gerektirir, bu yüzden p '-1'i geçmek için tuhaf şeyler yapmak zorunda kaldım. yordamlar, burada p bir dizin haritasıdır.
Reid.Atcheson,

9

Tecrübelerime göre, Julia henüz günlük kullanıma (bilimsel) hazır değil (Mart 2016'nın dengeli versiyonundan bahsediyorum). Dil güzel, zengin ve tutarlı özellik; Hem matlab hem de pythondan ileriye doğru serinletici bir adım. Bu erken aşamada bile Julia'nın iyi bir seçim olduğu durumlar kesinlikle vardır. Fakat güvenilir ve olgun bilimsel kütüphanelere ihtiyacınız varsa, şimdi harekete geçmenizi öneremem. Karşılaştığım başlıca sorunlar:

  • Julia'nın çekirdeğinin dışındaki paketler güvenilir değil. Güncellemelerle ayrılırlar, değişirler, değiştirilirler, bazen eksik veya basitçe kırılırlar.
  • Julia'nın paralellik özellikleri (en umut verici potansiyel matlab katil özellikleri imo) olgunlaşmamış. Segmentasyon hataları, hafıza sızıntıları, çökmeler ve hayal kırıklığı yaratan performanslarla karşılaşacaksınız. Bazen, julia'nın diğer bölümleriyle iyi oynamıyorlar; örneğin, doğrusal sistemler için çözücülerden bazıları veya çekirdeğin dışındaki paketler. Bu özellikler umut verici görünmekle birlikte, benim için yeterince başarısız olmuşlardır. Neredeyse hiçbir zaman basitçe @parallelfor döngüsünün önüne yazmak yeterli olmadı, teoride nerede olması gerektiğini.
  • Pek çok küçük şey, küçük hatalar ve birinin yaşayabileceği sorunlar: çok hoş olmayan ve bazen hatalı çağrı yığını izleri, küçük bir tercüman geçmişi, paketlerin yavaş yüklenmesi, bir ya da başka paket / işlevin kötü performans göstermesi vs. çoğu, matplotlib için bir sarmalayıcı olan PyPlot paketi, şu anda buna alternatif yok. Orada olması ve çoğunlukla işe yaraması gerçekten harika. Ancak, verileri çizmeniz gerekiyorsa, çok yavaş performans ve sorunlara hazırlıklı olun.

Hepsi daha iyi olacak. Bir gün Julia'nın hemen hemen her açıdan matlab ve pythondan üstün olacağına eminim. Şanslar, bunun için yenilikçi paketler geliştirilecek olması harika. Zaten büyük bir topluluk var gibi görünüyor. Şimdi bile, opencl'den web sunucularına kadar çeşitli kullanım durumlarına sahip çok sayıda paket bulunmaktadır. Python veya c kütüphanelerini kullanmak çok kolaydır, bu yüzden muhtemelen kütüphane kullanılabilirliği açısından bir duvara çarpmazsınız. Julia'nın güçlü bir gücü, birinin yüksek performanslı işlevselliği çeşitli kaynaklardan modern ve tutarlı bir yüksek dilde bir araya getirebilmesi için çaba göstermemektir (yukarıdaki cevaplara bakınız). Fakat bir bütün olarak, üretken olarak kullanılabilecek kadar olgun veya istikrarlı olmadığını tespit ettim.

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.