DEV Community на русском
Подписаться
V.E.L.O.C.I.T.Y.-OS: Ядро компилятора JIT – от AST к нативным замыканиям (Часть 4)
Автор разрабатывает новую операционную систему без металла под названием V.E.L.O.C.I.T.Y.-O, предназначенную для работы в кэше L3 процессора. В рамках этого проекта они столкнулись с проблемами с производительностью стандартного интерпретатора для своих программ Neural Document Architecture (NDA) из-за чрезмерных накладных расходов на диспетчеризацию. Для решения этой проблемы был реализован компилятор Just-In-Time (JIT) для перевода абстрактного синтаксического дерева (AST) в родной машинный код.Этот JIT-компилятор, называемый Tier-1 Closure-Based JIT, генерирует вложенные Rust-замыкания вместо прямых машинных инструкций. Этот подход разрешает совпадения операций, проверки области и ветвления управляющего потока во время компиляции, позволяя выполнять выполнение во время выполнения просто по заранее скомпилированной цепочке указателей функций. Поиск переменных оптимизируется от запросов к хэш-картам до прямых смещений памяти путём предварительного выделения слотов и их встраивания в замки.Серьёзной проблемой было управление проверкой заимствований Rust, особенно когда для закрытия требовали доступа к внешним структурам данных, таким как база данных Merkle. Изначально это требовало дорогостоящего подсчёта ссылок через Arc, но проблема была решена с помощью High-Ranked Trait Bounds (HRTB), позволяющих закрытиям принимать состояния любой жизни. Движок JIT дополнительно был помещён в специализированную песочницу для безопасной компиляции и выполнения.Эта JIT-компиляция на основе замыкания обходит узкие места сериализации, позволяя быстрее обрабатывать результаты моделей. Однако автор отмечает, что необходимы дополнительные оптимизации для распределения кучи и целочисленных операций. В следующем выпуске будут подробно описаны оптимизации для JIT-математики, включая циклы без деления.