2013-09-25 14 views
10

I (piton aksine) bir genel amaçlı bilimsel bilgi işlem dili olarak Julia kullanarak keşfetmek ediyorum, ama bu başlangıç ​​zamanı oldukça halsiz olduğu bu. Bu hızlandırma herhangi bir yoluYavaş Julia Başlatma Süresi

var mı?

$ time python -c 'print "Hello"' 
Hello 

real 0m0.030s 
user 0m0.018s 
sys 0m0.010s 

$ time julia -e 'println("Hello")' 
Hello 

real 0m4.614s 
user 0m4.644s 
sys 0m0.116s 

EK: Here Julia yazarlarından biri geçen yıl bir alıntı. Bu strateji ile bazı zorluklar var mıydı? Julia çoğu kendi dili ile yazılmış

sonra tip-anlaşılmaktadır ve jitted yüzden sıfırdan tüm sistemi işe koşulması bazı 15-20 saniye sürer ayrıştırıldı. Daha hızlı hale getirmek için, biz, ayrıştırmak tip anlaması ve sonra dosya sys.ji. içinde tip anlaşılmaktadır AST tefrika sürümünü önbelleğe aşamalı sistem var Bu dosya yüklendi ve julia'yı çalıştırdığınızda sistemi çalıştırmak için kullanıldı. Hiçbir LLVM kodu veya makine kod Ancak sys.ji önbelleğe, bu nedenle tüm LLVM jitting hala bu nedenle yaklaşık 2 saniye sürer ki her zaman Julia başlatıldığında yapılması gerekiyor.

Bu 2 saniye başlangıç ​​gecikme oldukça rahatsız edici ve biz planı sabitleme var. Temel plan, tüm Julia programlarını ikili dosyalara derleyebilmektir: Çalıştırılabilen yürütülebilir dosyalar veya .so/.dylib diğer programlardan basitçe C kütüphaneleri paylaşıldıkları söylenebilir. Bir ikili için başlangıç ​​zamanı, diğer C programları gibi olacaktır, böylece 2 saniyelik başlatma gecikmesi ortadan kalkar.

+0

Şimdi kontrol edebilirsiniz Julialang Depodaki bir dal var. https://github.com/JuliaLang/julia/pull/4898. Büyük olasılıkla hala devam eden bazı sorunlar var, bu yüzden kendi riskinizi deneyin. Muhtemelen önümüzdeki 0,3 sürümüne dahil edilecektir. – ivarne

cevap

7

ben yorumunda belirtildiği branch şimdi birleştirildi ve Julia her zamankinden daha fazla, başlangıçta (ve hiçbir şey yapmadan) için optimize edilmiştir.

$> time julia -e 'println("Hello")' 
Hello 

real 0m0.622s 
user 0m1.013s 
sys  0m0.624s 

Bu, artık gece yapımlarında kullanılabilir ve sonraki 0,3 sürümüne eklenecektir.

+0

'' 'Zaman Julia-e 'println ("Merhaba")' Merhaba gerçek 1m35.137s kullanıcı sys 1m33.604s ' '' 0m0.328s Ve Julia 0.5.0 üstündeyim Ve bu 16GiB RAM ile bir çekirdek i3 makinesi ve bir ahududu pi değil! –

+0

Julia kurulumunuzda bir şeylerin yanlış olduğu anlaşılıyor. Ne os kullanıyorsunuz ve nasıl julia – ivarne

+0

yüklediniz ubuntu 16.04.1 LTS kullanıyorum. ".tar.gz" dosyasından yükledim. –

7

Ne yazık ki Julia şu anda başlamak için çok fazla zaman harcıyor, bu yüzden bunu gerçekten küçük problemler için bir bash betiğinde kullanmak neredeyse imkansız. Muhtemelen, julia'yı bir çok şeyi yapmak için döngüler kullanan karmaşık bir örnekle daha fazla bir sonuç elde edeceksiniz, ancak 2-4 saniyelik başlama başlangıcında, yeterince zamana yetecek kadar büyük bir problemi gerektirir. Bilimsel bilginiz için başlangıç ​​zamanı en önemliyse, Julia henüz hazır değil. Aynı eşit olmayan bir karşılaştırma, aptal özyineli formül kullanılarak bilgisayarlı fibonacci sayılarına bakmaktır. Eğer 26'nın üzerine çıkarsanız çok daha da kötüleşir. Ayrıca, kodun Julia'nın ne kadar kompakt olduğunu da anlatın.

>>> ivarne~/dev/julia$ time julia -e 'fib(x) = x<2?1:fib(x-1)+fib(x-2);println(fib(36))' 
24157817 

real 0m2.763s 
user 0m2.776s 
sys  0m0.093s 
>>> time python -c $'def fib(x):\n if x<2: return 1\n else: return fib(x-1)+ fib(x-2);\nprint fib(36)' 
24157817 

real 0m8.371s 
user 0m8.336s 
sys  0m0.025s 

Sorunu hızlandırmanın bir yolunu istediniz; işte burada:

>>> time echo "Hello" 
Hello 

real 0m0.000s 
user 0m0.000s 
sys  0m0.000s 
+0

Karşılaştırmanın ne anlama geldiğini bilmiyorum. Python versiyonu buggy - iki versiyon da aynı numarayı hesaplamıyor!- ve eğer kompaktlık konusunda bir fikir sahibi olsaydınız, python programcıları doğruluk ve netlikten daha fazla umursamalarına rağmen, x = 3 başka bir fib (x-1) + fib (x-2) ise, fib = lambda x: 1 yazabilirsiniz. karakter. – DSM

+0

Julia ve Python arasındaki performansı karşılaştırdığınızda, sonucun yaptığınız göreve bağlı olduğunu göstermeye çalışıyorum. – ivarne

+2

En verimli ekoyu bulmaya çalışmıyorum; -PI, en son teknolojinin julia'da ne olduğunu merak ediyordu. –