Как происходит PE для интерпретатора Truffle, AOT-скомпилированного с помощью native-image?

Использование native-image для сокращения времени запуска интерпретаторов Truffle быть обычным.

Насколько я понимаю, компиляция AOT с использованием native-image приведет к созданию методов, скомпилированных в собственный код, которые выполняются в специальной SubstrateVM.

Кроме того, фреймворк Truffle полагается на динамически собираемую информацию профилирования, чтобы определить, какие деревья узлов следует частично оценивать. И этот PE работает, беря байт-код JVM рассматриваемых узлов и анализируя его с помощью компилятора Graal JIT.

И вот в чем я запутался. Если мы передадим интерпретатор Truffle через native-image, код для методов каждого узла будет собственным кодом. Как же тогда может продолжаться PE? На самом деле, доступен ли Graal в SubstrateVM?


person danidiaz    schedule 13.10.2019    source источник
comment
Извините, а что такое PE?   -  person Roy Truelove    schedule 25.10.2019
comment
@RoyTruelove Partial Evaluation, метод, используемый Truffle для получения эффективного собственного кода из интерпретатора chrisseaton.com/rubytruffle/pldi17-truffle/pldi17-truffle.pdf   -  person danidiaz    schedule 25.10.2019


Ответы (1)


Помимо собственного кода интерпретатора, SVM также хранит в образе представление интерпретатора (группу методов, которые соответствуют интерпретатору) для частичной оценки. Формат этого представления - это не байт-коды JVM, а графики, уже преобразованные в форму Graal IR. PE работает на этих графах, создавая оптимизированные графы еще меньшего размера, которые затем передаются компилятору Graal, так что да, SVM также поставляет компилятор Graal в собственном образе. Почему графики Грааля, а не байткоды? Байт-коды использовались в прошлом, но при сохранении графиков напрямую сохраняется этап анализа (байт-коды в Graal IR).

person Community    schedule 13.10.2019