2013-09-25 4 views
10

Sto esplorando l'utilizzo di Julia come linguaggio di calcolo scientifico generico (al contrario di python), ma il tempo di avvio è piuttosto lento.Tempo di avvio lento Julia

C'è un modo per velocizzare questo?

$ 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 

ADDENDUM: Here è una citazione da uno degli autori Julia lo scorso anno. C'è stata qualche difficoltà con questa strategia?

maggior parte di Julia è scritto in sé, poi analizzato, tipo-dedotto e jitted, così bootstrap l'intero sistema da zero richiede alcune 15-20 secondi. Per renderlo più veloce, abbiamo un sistema a stadi in cui si analizza , si inferisce il tipo e si memorizza nella cache una versione serializzata dell'AST con il tipo nel file sys.ji. Questo file viene quindi caricato e utilizzato per eseguire il sistema quando si esegue julia. Nessun codice LLVM o codice macchina è memorizzato nella cache in sys.ji, tuttavia, per cui tutto il jolly LLVM deve ancora eseguire ogni volta che julia si avvia, il che richiede circa 2 secondi.

Questo ritardo di avvio di 2 secondi è piuttosto fastidioso e abbiamo un piano per il che lo fissa. Il piano di base è di essere in grado di compilare interi programmi Julia in binari: eseguibili che possono essere eseguiti o librerie condivise .so/.dylib che possono essere chiamate da altri programmi come se fossero semplicemente librerie C condivise. Il tempo di avvio di un binario sarà come qualsiasi altro programma C, quindi il ritardo di avvio di 2 secondi svanirà.

+0

Ora c'è una filiale nel repository Julialang da verificare. https://github.com/JuliaLang/julia/pull/4898. Probabilmente ci sono ancora problemi, quindi prova a tuo rischio. Probabilmente sarà incluso nella prossima versione 0.3. – ivarne

risposta

7

Il branch ho accennato nel commento è stato ora fusa e Julia è più ottimizzato per l'avvio (e non fare nulla), che mai.

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

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

Questo è ora disponibile nei build notturni e sarà incluso nella prossima versione 0.3.

+0

'' 'tempo julia -e 'println ("Ciao")' Ciao reali 1m35.137s utente 0m0.328s sys 1m33.604s ' '' e io sono su Julia 0.5.0 E questo è una macchina core i3 con 16GiB RAM e non un pi lampone! –

+0

Sembra che ci sia qualcosa che non va nella tua installazione di julia. Che cosa stai usando e come hai installato julia – ivarne

+0

Sto usando Ubuntu 16.04.1 LTS. L'ho installato dal file ".tar.gz". –

7

Sfortunatamente Julia utilizza attualmente molto tempo per iniziare, quindi è quasi impossibile usarlo in uno script bash per problemi veramente piccoli. Probabilmente otterrai un risultato che favorisce julia di più con un esempio complicato che usa i loop per fare cose più volte, ma con un avvio di 2-4 secondi richiede un grosso problema per avere abbastanza tempo a disposizione. Se il tempo di avvio è il più importante per il tuo calcolo scientifico, Julia non è ancora pronta.

Un paragone altrettanto ingiusto è quello di esaminare i numeri di Fibonacci utilizzando la stupida formula ricorsiva. Diventa molto peggio se vai sopra i 26. Notate anche quanto è compatta la versione di Julia del codice.

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

Come richiesto per accelerare il problema; qui è:

>>> time echo "Hello" 
Hello 

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

Non sono sicuro di ciò che il confronto dovrebbe dimostrare. La versione Python è buggy - le due versioni non calcolano nemmeno lo stesso numero!- e potresti aver scritto 'fib = lambda x: 1 if x <3 else fib (x-1) + fib (x-2)' se ti importa della compattezza, anche se solitamente i programmatori Python si preoccupano della correttezza e della chiarezza più che personaggi. – DSM

+0

Provo a dimostrare che quando si confrontano le prestazioni tra Julia e Python, il risultato dipende molto dall'attività che si esegue. – ivarne

+2

Non sto cercando di trovare l'eco più efficiente; -PI si stava solo chiedendo quale sia lo stato dell'arte nel ridurre il sovraccarico in julia –