Двоичное преобразование

редактировать

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

Двумя основными типами являются статическая и динамическая двоичная трансляция. Трансляция может выполняться аппаратно (например, схемами в CPU ) или программно (например, механизмами времени выполнения, статическим рекомпилятором, эмуляторами).

Содержание

  • 1 Мотивация
  • 2 Статическая двоичная трансляция
    • 2.1 Примеры статической двоичной трансляции
  • 3 Динамическая двоичная трансляция
    • 3.1 Примеры динамической двоичной трансляции в программном обеспечении
    • 3.2 Примеры динамической двоичные переводы в аппаратном обеспечении
  • 4 См. также
  • 5 Ссылки
  • 6 Дополнительная литература

Мотивация

Двоичная трансляция мотивирована отсутствием двоичного кода для целевой платформы, отсутствием исходного кода код для компиляции для целевой платформы или другие трудности при компиляции исходного кода для целевой платформы.

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

Статическая двоичная трансляция

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

Один такой статический двоичный транслятор использует универсальную технологию superoptimizer peephole (разработанную Алексом Айкеном из Стэнфордского университета ) для эффективного перевода между возможно, много исходных и целевых пар со значительно низкими затратами на разработку и высокой производительностью целевого двоичного файла. В экспериментах по преобразованию PowerPC в x86 некоторые двоичные файлы даже превосходили собственные версии, но в среднем они работали со скоростью две трети от исходной скорости.

Примеры статической двоичной трансляции

Honeywell предоставила программу под названием Liberator для своих компьютеров серии Honeywell 200 ; он мог переводить программы для компьютеров IBM 1400 series в программы для Honeywell серии 200.

В 2014 году ARM-архитектура версия 1998 видеоигра StarCraft была создана путем статической перекомпиляции и дополнительного обратного проектирования исходной x86 версии. Сообщество портативных устройств Pandora способно самостоятельно разработать необходимые инструменты и несколько раз успешно выполнить такие переводы.

Например, успешный переход с x86 на x64 статическая перекомпиляция была сгенерирована для процедурного генератора ландшафта видеоигры Cube World в 2014 году.

Другим примером является NES -to- x86 статически перекомпилированная версия видеоигры Super Mario Bros., созданная с использованием LLVM в 2013 году.

В 2004 году Скотт Эллиотт и Филипп Р. Хатчинсон из Nintendo разработал инструмент для генерации кода «C» из двоичного файла Game Boy, который затем можно было скомпилировать для новой платформы и связать с аппаратной библиотекой для использования в авиалиниях. развлекательные системы.

В 1995 году Норман Рэмси из Bell Communications Research и Мэри Фернандес из Департамента компьютерных наук Принстонского университета разработали The New Jersey Machine-Code Toolkit. это было базовые инструменты для статической трансляции ассемблера.

Динамическая двоичная трансляция

Динамическая двоичная трансляция (DBT) рассматривает короткую последовательность кода - обычно порядка одного базового блока - затем переводит и кэширует полученную последовательность. Код переводится только тогда, когда он обнаруживается и когда это возможно, а инструкции ветвления указываются на уже переведенный и сохраненный код (мемоизация ).

Динамическое двоичное преобразование отличается от простой эмуляции (устранение основного цикла чтения-декодирования-выполнения в эмуляторе - основного узкого места производительности), которое оплачивается большими накладными расходами во время преобразования. Мы надеемся, что эти накладные расходы окупятся, поскольку переведенные кодовые последовательности выполняются несколько раз.

Более продвинутые динамические трансляторы используют динамическую перекомпиляцию, при которой переведенный код инструментируется для определения того, какие части выполняются большое количество раз, и эти части оптимизированы агрессивно. Этот метод напоминает JIT-компилятор, и на самом деле такие компиляторы (например, HotSpot от Sun ) можно рассматривать как динамические трансляторы из виртуальной инструкции. установить (байт-код ) на реальный.

Примеры динамической двоичной трансляции в программном обеспечении

  • Apple Computer реализовал динамический транслятор эмулятор для кода M68K в своем PowerPC Линия Macintosh, которая достигла очень высокого уровня надежности, производительности и совместимости (см. эмулятор Mac 68K ). Это позволило Apple вывести машины на рынок только с частично родной операционной системой, а конечные пользователи могли принять новую, более быструю архитектуру, не рискуя своими инвестициями в программное обеспечение. Отчасти из-за того, что эмулятор был настолько успешным, многие части операционной системы оставались эмулированными. Полный переход на собственную операционную систему (OS) PowerPC не производился до выпуска Mac OS X (10.0) в 2001 году. (Mac OS X "Classic "среда выполнения продолжала предлагать эту возможность эмуляции на PowerPC Mac до тех пор, пока Mac OS X 10.5.)
  • Mac OS X 10.4.4 для компьютеров Mac на базе Intel не представила динамическую Rosetta уровень перевода, чтобы упростить переход Apple с аппаратного обеспечения на базе PPC на x86. Программное обеспечение Rosetta, разработанное для Apple компанией Transitive Corporation, является реализацией решения Transitive QuickTransit.
  • QuickTransit в течение всего срока службы продукта также обеспечивал переводы SPARCx86, x86 → PowerPC и MIPSItanium 2
  • DEC добилась аналогичного успеха со своими инструментами перевода, помогая пользователям перейти с архитектуры CISC VAX на Alpha RISC архитектура.
  • HP ARIES (Automatic Re-translation and Integrated Environment Simulation) - программный Система динамической двоичной трансляции tware, сочетающая быструю интерпретацию кода с двухфазной динамической трансляцией для прозрачного и точного выполнения приложений HP 9000 HP-UX на HP-UX 11i для Серверы HPE Integrity. Быстрый интерпретатор ARIES эмулирует полный набор непривилегированных инструкций PA-RISC без вмешательства пользователя. Во время интерпретации он отслеживает схему выполнения приложения и переводит только часто выполняемый код в собственный код Itanium во время выполнения. ARIES реализует двухэтапную динамическую трансляцию, метод, при котором транслируемый код на первом этапе собирает информацию профиля времени выполнения, которая используется во время второго этапа трансляции для дальнейшей оптимизации переведенного кода. ARIES хранит динамически транслируемый код в буфере памяти, называемом кешем кода. Дальнейшие ссылки на переведенные базовые блоки выполняются непосредственно в кэше кода и не требуют дополнительной интерпретации или перевода. Цели переведенных блоков кода исправлены, чтобы гарантировать, что выполнение происходит в кэше кода большую часть времени. В конце эмуляции ARIES удаляет весь переведенный код, не изменяя исходное приложение. Механизм эмуляции ARIES также реализует эмуляцию среды, которая эмулирует системные вызовы приложения HP 9000 HP-UX, доставку сигналов, управление исключениями, управление потоками, эмуляцию HP GDB для отладки и создания файла ядра для приложения.
  • DEC создала двоичный транслятор FX! 32 для преобразования приложений x86 в приложения Alpha.
  • Sun Microsystems 'Программное обеспечение Wabi включало динамический перевод инструкций x86 в SPARC.
  • В январе 2000 года Transmeta Corporation объявила о новой конструкции процессора под названием Crusoe. Из FAQ на их веб-сайте:

    Интеллектуальный микропроцессор состоит из аппаратного ядра VLIW в качестве ядра и программного уровня, называемого программным обеспечением для преобразования кода. Программное обеспечение Code Morphing действует как оболочка […] морфинга или перевода инструкций x86 в собственные инструкции Crusoe. Кроме того, программа Code Morphing содержит динамический компилятор и оптимизатор кода […] В результате повышается производительность при минимальной мощности. […] [Это] позволяет Transmeta отдельно развивать аппаратное обеспечение VLIW и программное обеспечение Code Morphing, не затрагивая огромную базу программных приложений.

  • Корпорация Intel разработала и внедрила IA-32 Execution Layer - динамический двоичный транслятор, предназначенный для поддержки приложений IA-32 в системах на базе Itanium, который был включен в Microsoft Windows Server для Itanium, а также в нескольких разновидностях Linux, включая Red Hat и Suse. Это позволило приложениям IA-32 работать быстрее, чем при использовании собственного режима IA-32 на процессорах Itanium.
  • Dolphin (эмулятор для GameCube / Wii ) выполняет JIT-перекомпиляцию кода PowerPC в x86 и AArch64.

Примеры динамической двоичной трансляции в аппаратном обеспечении

  • процессоры Intel x86, поскольку Pentium Pro преобразует сложные CISC инструкции x86 в подробнее RISC -подобные внутренние микрооперации.
  • Nvidia Tegra K1 Denver переводит инструкции ARM через медленный аппаратный декодер в свои собственные инструкции микрокода и использует программный двоичный транслятор для горячего кода.

См. также

Ссылки

Дополнительная литература

Последняя правка сделана 2021-05-12 06:26:21
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте