Медленное время запуска Julia

Я изучаю использование Джулии в качестве общего научного вычислительного языка (в отличие от python), но время запуска довольно вяло.

Есть ли способ ускорить это?

$ 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

ДОБАВЛЕНИЕ: Здесь приведена цитата одного из авторов Джулии в прошлом году. Были ли трудности с этой стратегией?

Большая часть Джулии написана сама по себе, затем анализируется, вводится тип и jitted, поэтому загрузка всей системы с нуля требует некоторых 15-20 секунд. Чтобы сделать это быстрее, у нас есть поэтапная система, где мы проанализировать, ввести тип и затем кешировать сериализованную версию type-inferred AST в файле sys.ji. Затем этот файл загружается и используется для запуска системы при запуске julia. Нет кода или машины LLVM код кэшируется в sys.ji, однако, все, что нужно LLVM jitting каждый раз, когда начинается julia, что, следовательно, занимает около 2 секунд.

Эта 2-секундная задержка запуска довольно раздражает, и у нас есть план для фиксируя его. Основной план - собрать всю Юлию программы для двоичных файлов: либо исполняемые файлы, которые можно запустить, либо .so/.dylib разделяемые библиотеки, которые можно вызывать из других программ, как если бы они были просто разделены библиотеками C. Время запуска для двоичного файла будет как и любая другая программа C, поэтому 2-секундная задержка запуска исчезнет.

Ответ 2

К сожалению, в настоящее время Julia использует много времени для начала, поэтому почти невозможно использовать его в bash script для действительно небольших проблем. Вероятно, вы получите результат, который больше подходит для julia со сложным примером, который использует петли, чтобы делать что-то несколько раз, но с 2-4-секундным стартом для этого требуется большая проблема, чтобы иметь достаточное время для догоняющего. Если время запуска является самым важным для ваших научных вычислений, Юлия еще не готова.

В равной степени несправедливое сравнение - это вычислить число фибоначчи, используя тупо рекурсивную формулу. Это намного хуже, если вы выше 26. Также обратите внимание, насколько компактна версия Джулии кода.

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

Как вы попросили способ ускорить проблему; вот он:

>>> time echo "Hello"
Hello

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