2016-08-02 9 views
1

Я слышал очень противоречивую информацию об экспериментальной функции компилятора Октава JIT, начиная от «это был игрушечный проект, но он в основном не работает», «Я использовал его, и я получаю значительный ускорив».Октав JIT компилятор. Текущее состояние и минимальный пример, демонстрирующий эффект

Я понимаю, что для того, чтобы использовать его успешно нужно

  • Compile октавы с --enable-jit во время конфигурации
  • Launch октава с опцией --jit-compiler
  • Укажите JIT компиляцию предпочтение во время выполнения используя jit_enable и jit_startcnt команды

, но я не смог воспроизводить эффекты убедительно; не уверен, что это потому, что я пропустил какие-либо другие шаги, о которых я не знаю, или просто не оказывает большого влияния на мою машину.

Вопрос: Может ли тот, кто использовал эту функцию, предоставить минимальный рабочий пример, демонстрирующий его правильное использование и эффект, который он имеет (если есть) на своей машине?

ответ

7

Короче:

  • вам не нужно ничего делать, чтобы использовать JIT, он должен просто работать и ускорить ваш код, если он может;
  • это в основном бесполезно, потому что оно работает только для простых циклов;
  • это не более чем доказательство концепции;
  • не один в настоящее время работает над улучшением его, потому что:
    • это сложная задача;
    • это в основном исправление для неаккуратного кода Octave;
    • использует LLVM, который является слишком неустойчивым.

Q: Может ли кто-то, кто использовал эту функцию успешно обеспечивают минимальный рабочий пример, демонстрирующий его правильное использование и эффект у него есть (если таковые имеются) на своей машине?

Невозможно ничего показать. Если вы создадите Octave с поддержкой JIT, Octave автоматически использует более быстрый код для некоторых циклов. Единственное отличие состоит в скорости, и вы не должны изменить свой код (хотя вы можете отключить JIT во время выполнения):

octave> jit_enable (1) # confirm JIT is enabled 
octave> tic; x = 0; for i=1:100000, x += i; endfor, toc 
Elapsed time is 0.00490594 seconds. 
octave> jit_enable (0) # disable JIT 
octave> tic; x = 0; for i=1:100000, x += i; endfor, toc 
Elapsed time is 0.747599 seconds. 

## but you should probably write it like this 
octave> tic; x = sum (1:100000); toc 
Elapsed time is 0.00327611 seconds. 

## If Octave was built without JIT support, you will get the following 
octave> jit_enable (1) 
warning: jit_enable: support for JIT was unavailable or disabled when Octave was built 

Это простой пример, но вы можете увидеть лучшие примеры и более подробную информацию о blog единственного человека, который работал на нем, а также his presentation at OctConf 2012. Более подробная информация о (устаревшем), Octave's JIT wiki page

Обратите внимание, что JIT Octave работает только для очень простых петель. Такие простые циклы, которые никто не знал бы с языком, пишут их в первую очередь.Эта функция является доказательством концепции и отправной точкой для тех, кто может ее расширить (лично я предпочитаю писать векторизованный код, для чего предназначен язык).

У JIT Octave есть еще одна проблема, которая заключается в том, что она использует LLVM. Разработчики Octave считают это слишком ненадежным для этой цели, потому что он продолжает разорвать обратную совместимость. Каждый незначительный выпуск LLVM нарушил сборку Octave, поэтому разработчики Octave прекратили установку, когда LLVM 3.5 был выпущен и по умолчанию отключен.

+2

Возможно, нам следует обновить http://wiki.octave.org/FAQ#Just-In-Time_compiler и/или ссылку на этот ответ – Andy