Свежая выжимка ml и AI статей - каждый день
С переходом от традиционных архитектур, таких как x86, к более энергоэффективным и производительным архитектурам, например, ARM, возникает необходимость в эффективном переводе программного обеспечения. Этот процесс осложняется не только разницей в архитектурных парадигмах (CISC для x86 и RISC для ARM), но и обширным наследием программного обеспечения, написанного для x86. В данной статье мы рассмотрим инновационный подход к решению этой проблемы — использование языковых моделей (LLM) для автоматического перевода ассемблерного кода с x86 на ARM.
x86 — это архитектура с комплексным набором инструкций (CISC), где инструкции могут выполнять сложные операции и иметь переменную длину. В противоположность ей, ARM использует упрощенный набор инструкций (RISC), где инструкции просты, фиксированной длины и выполняют только базовые операции. Этот переход необходим не только для улучшения энергоэффективности, но и для адаптации к новым требованиям рынка, где ARM становится все более популярным благодаря своей эффективности и масштабируемости.
Перевод ассемблерного кода между этими архитектурами сталкивается с рядом проблем:
CRT (CISC to RISC Translator) — это легковесный транслятор на основе LLM, который автоматически преобразует x86 ассемблер в ARM ассемблер. CRT использует языковые модели для обучения на примерах пар кода, чтобы научиться переводить инструкции и сохранять семантику программы.
Обучение Модели: Модель обучается на большом наборе данных, состоящем из пар x86 и ARM кода, компилированных из одинаковых исходных файлов на языке C.
Токенизация: Для улучшения понимания и генерации кода, токенизатор расширяется для включения часто используемых опкодов и имен регистров обеих архитектур.
Перевод: Модель предсказывает последовательность ARM инструкций на основе введенных x86 инструкций, стремясь к минимальному расстоянию Левенштейна и максимальной функциональной корректности.
CRT демонстрирует, что языковые модели могут быть эффективно использованы для перевода ассемблерного кода между архитектурами CISC и RISC, обеспечивая высокую точность и производительность. Это открывает новые возможности для автоматизации процесса портирования программного обеспечения, что особенно актуально в условиях быстрого развития и изменения аппаратных платформ.