19.5 JIT-компилятор
Векторизация — предпочтительный метод для устранения циклов и ускорения кода. Тем не менее, не всегда возможно заменить каждый цикл. В таких ситуациях может быть полезно попробовать экспериментальный JIT-компилятор Octave.
JIT-компилятор работает, анализируя тело цикла, переводя операторы Octave на другой язык, компилируя новый фрагмент кода в исполняемый файл, а затем выполняя исполняемый файл и собирая результаты. Этот процесс не прост, и для каждого шага требуется значительная работа. Однако он может быть оправдан, если количество итераций цикла велико. Поскольку Octave — интерпретируемый язык, каждый раз при проходе по циклу Octave должен разобрать операторы в теле цикла перед их выполнением. С JIT-компилятором это делается только один раз, когда тело переводится на другой язык.
JIT-компилятор — очень новая функция в Octave, и в настоящее время не все допустимые операторы Octave могут быть ускорены. Однако, если нет других методов, может быть полезно сравнить код с включенным JIT. Функция jit_enable используется для включения или выключения компиляции. Функция jit_startcnt устанавливает порог для ускорения. Циклы с количеством итераций выше jit_startcnt будут ускорены. Функции jit_failcnt и debug_jit вряд ли будут полезны кому-либо, кто не работает непосредственно над реализацией JIT-компилятора.
- val = jit_enable ()
- old_val = jit_enable (new_val)
- jit_enable (new_val, "local")
-
Запрос или установка внутренней переменной, которая включает JIT-компилятор Octave.
При вызове изнутри функции с параметром
"local", переменная изменяется локально для функции и всех вызываемых ею подпрограмм. Исходное значение переменной восстанавливается при выходе из функции.См. также: jit_startcnt, debug_jit.
- val = jit_startcnt ()
- old_val = jit_startcnt (new_val)
- jit_startcnt (new_val, "local")
-
Запрос или установка внутренней переменной, определяющей, будет ли выполняться JIT-компиляция для конкретного цикла.
Поскольку компиляция — затратная операция, использование JIT нецелесообразно при небольшом количестве итераций в цикле. По умолчанию будут ускоряться только циклы с более чем 1000 итерациями.
При вызове изнутри функции с параметром
"local", переменная изменяется локально для функции и всех вызываемых ею подпрограмм. Исходное значение переменной восстанавливается при выходе из функции.См. также: jit_enable, jit_failcnt, debug_jit.
- val = jit_failcnt ()
- old_val = jit_failcnt (new_val)
- jit_failcnt (new_val, "local")
-
Запрос или установка внутренней переменной, которая подсчитывает количество исключений JIT-ошибок для JIT-компилятора Octave.
При вызове изнутри функции с параметром
"local", переменная изменяется локально для функции и всех вызываемых ею подпрограмм. Исходное значение переменной восстанавливается при выходе из функции.См. также: jit_enable, jit_startcnt, debug_jit.
- val = debug_jit ()
- old_val = debug_jit (new_val)
- debug_jit (new_val, "local")
-
Запрос или установка внутренней переменной, которая определяет, включено ли отладка/трассировка для JIT-компилятора Octave.
При вызове изнутри функции с параметром
"local", переменная изменяется локально для функции и всех вызываемых ею подпрограмм. Исходное значение переменной восстанавливается при выходе из функции.См. также: jit_enable, jit_startcnt.
© 1996–2022 The Octave Project Developers
Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice are preserved on all copies.
Permission is granted to copy and distribute modified versions of this manual under the conditions for verbatim copying, provided that the entire resulting derived work is distributed under the terms of a permission notice identical to this one.Permission is granted to copy and distribute translations of this manual into another language, under the above conditions for modified versions.
https://docs.octave.org/v5.2.0/JIT-Compiler.html