RPCS3: AOT-компилятор PPU

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

Динамическая рекомпиляция (так называемая JIT-компиляция) используется в подавляющем большинстве эмуляторов, до недавнего времени подобная техника использовалась и в RPCS3 – эмуляторе Sony PlayStation 3. При динамической рекомпиляции исходный код игры перекомпилируется на лету, и при должной реализации позволяет достичь очень хороших результатов. Однако не в случае с PlayStation 3.

Основным элементом ЦП данной консоли является PPU (Power Processing Unit), основанный на RISC-архитектуре PowerPC. Высокая производительность данного юнита заставляет хорошенько потрудиться любой современный процессор, на котором его пытаются эмулировать. Однако есть одна замечательная особенность: компилятор из официального SDK, используемый при сборке программ для PlayStation 3, запрещает генерацию самоизменяющегося кода. Таким образом, фактически отпадает потребность в динамической рекомпиляции.

Данную особенность и использовал один из основных разработчиков RPCS3 – Nekotekina. Статический рекомпилятор (AOT-компилятор) производит разбор и анализ запускаемого файла до начала исполнения его кода. Затем при помощи компилятора, входящего в инструментарий LLVM, производится перекомпиляция исходного кода в оптимизированный код хостовой машины (в нашем случае – x86-64). Таким образом, рекомпиляция производится один раз в единый монолитный блок кода при первом запуске исполняемого файла, а не на лету, как в случае с JIT.

Что это нам дает? Чаще всего, намного более быстрый код (использование внешнего компилятора позволяет положиться на его возможности в оптимизации исходного кода), а также отсутствие характерных подтормаживаний в  процессе исполнения, когда производится перекомпиляция очередного блока кода. Несущественные недостатки – относительно долгие анализ и компиляция запускаемого файла, которые зависят от его размеров и подключенных LLE модулей в RPCS3, а также потребность в достаточно большом объеме памяти на момент компиляции (до нескольких ГБ).

Ниже приведены несколько скриншотов, позволяющих сравнить скорость AOT-компилятора PPU с интерпретатором:
 
Традиционный кубик с динамической текстурой:
 
Главное меню игры Sonic CD:
 
Ингейм Comix Zone:

Рекомпилятор доступен в последних сборках RPCS3, не стесняйтесь его опробовать!
+8

Комментарии 4

  1. Nicko
    Nicko от 22 июня 2016 08:58
    мне кажется или такая статья уже была здесь давным давно?
  2. UnrealMister
    UnrealMister от 26 июня 2016 09:20
    Напрочь забыл информацию авторизации mellow , приятная новость о возрождении. Надеюсь вы будете расширяться в вк, ибо там сейчас в самой популярной группе свыше 6k особей, и все смотрят как один проводит тесты на i3. Вообщем там все печально, а вам заодно поднимет посещаемость). Как бы ни было удачи, с нетерпением жду ежемесячных отчетов.
Добавить комментарий

Оставить комментарий