2013-09-25 12 views
10

Używam Julii jako ogólnego języka komputerowego (w przeciwieństwie do Pythona), ale czas uruchamiania jest dość powolny.Powolny czas uruchomienia Julii

Czy jest jakiś sposób przyspieszenia tego?

$ 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 

DODATEK: Here cytat z jednego z autorów Julia ostatni rok. Czy była jakaś trudność z tą strategią?

Większość Julia jest napisane w sobie, a następnie analizowany, typu wywnioskować i jitted, więc ładowanie początkowe cały system od podstaw zajmuje kilka 15-20 sekund. Aby przyspieszyć działanie, mamy system etapowy, na którym analizujemy, typujemy, a następnie buforujemy zindywidualizowaną wersję identyfikatora AST typu w pliku sys.ji. Ten plik jest następnie ładowany i używany do uruchamiania systemu po uruchomieniu julia. Żaden kod LLVM ani kod maszynowy nie jest zapisany w pamięci podręcznej w sys.ji, więc cały proces JL LVM nadal wymaga do wykonania przy każdym uruchomieniu julia, co w związku z tym zajmuje około 2 sekund.

To 2-sekundowe opóźnienie uruchamiania jest dość denerwujące i mamy plan naprawienia go na . Podstawowym planem jest możliwość skompilowania całych programów Julia do plików binarnych: plików wykonywalnych, które można uruchamiać lub .so/.dylib bibliotek współdzielonych, które można wywoływać z innych programów tak, jakby były były po prostu współdzielonymi bibliotekami C. Czas uruchamiania dla pliku binarnego będzie jak każdy inny program C, więc 2-sekundowe opóźnienie uruchomienia zniknie.

+0

Teraz istnieje oddział w repozytorium Julialanga, który można sprawdzić. https://github.com/JuliaLang/julia/pull/4898. Prawdopodobnie nadal istnieją pewne problemy, więc spróbuj na własne ryzyko. Prawdopodobnie pojawi się w nadchodzącym wydaniu 0.3. – ivarne

Odpowiedz

7

branch wspomniałem w komentarzu, teraz zostały połączone i Julia jest bardziej zoptymalizowany pod kątem uruchamiania (i nic nie robi), niż kiedykolwiek.

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

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

To jest teraz dostępne w nocnych kompilacjach i zostanie dołączone do następnej wersji 0.3.

+0

'' 'Czas Julia -e 'println ("Hello")' Witam prawdziwe 1m35.137s użytkownik 0m0.328s sys 1m33.604s ' '' i jestem na Julia 0.5.0 I to jest rdzeń maszyny i3 z pamięcią 16GiB RAM, a nie raspberry pi! –

+0

Wygląda na to, że coś jest nie tak z twoją instalacją julia. Jakiego używasz i jak zainstalowałeś julia – ivarne

+0

Używam Ubuntu 16.04.1 LTS. Zainstalowałem go z pliku ".tar.gz". –

7

Niestety Julia obecnie używa dużo czasu, aby rozpocząć, więc jest prawie niemożliwe, aby użyć go w skrypcie basha dla naprawdę małych problemów. Prawdopodobnie uzyskasz wynik, który faworyzuje Julię bardziej skomplikowanym przykładem, który używa pętli do robienia rzeczy wiele razy, ale z 2-4 sekundowym początkiem wymaga dużego problemu, aby nadrobić wystarczająco dużo czasu. Jeśli czas uruchomienia jest najważniejszy dla twojej pracy naukowej, Julia nie jest jeszcze gotowa.

Równie niesprawiedliwym porównaniem jest przyglądanie się komputerowym liczbom fibonacci za pomocą głupiej rekurencyjnej formuły. Staje się o wiele gorzej, jeśli przekroczysz 26 lat. Zwróć też uwagę na zwartą wersję kodu Julii.

>>> 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 

Jak prosiliście o sposób na przyspieszenie problemu; tutaj jest:

>>> time echo "Hello" 
Hello 

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

Nie jestem pewien, co porównanie ma udowodnić. Wersja Pythona jest błędna - obie wersje nawet nie obliczają tego samego numeru!- i mógłbyś napisać 'fib = lambda x: 1 jeśli x <3 else fib (x-1) + fib (x-2)' gdybyś dbał o zwartość, chociaż zwykle programiści pytają o poprawność i jasność więcej niż postacie. – DSM

+0

Próbuję pokazać, że porównując wydajność między Julią i Pythonem, wynik zależy w dużym stopniu od wykonywanego zadania. – ivarne

+2

Nie próbuję znaleźć najskuteczniejszego echa; -PI zastanawiałem się, co jest w stanie zmniejszyć obciążenie w Julii –