Назад

Архитектурно-ориентированные методы оптимизации машинного кода

Идея или концепция
TechNet
Искусственный интеллект
Санкт-Петербург
Санкт-Петербургский государственный электротехнический университет «ЛЭТИ» им. В.И. Ульянова (Ленина)
Цифровой профиль команды

Описание проекта

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

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

Как это работает?

  1. Сначала стартует приложение-оптимизатор, которому передаются параметры запуска основной программы.

  2. Оптимизатором производится подготовка и настройка среды запускаемой программы.

  3. Оптимизатор анализирует небольшой участок машинного кода, трансформирует и добавляет точки возврата управления, чтобы после работы изменённого кода вернуть себе контроль или «поймать» моменты выхода из программы. Если же в этот момент программа завершила работу, останавливается и оптимизатор.

  4. Управление передаётся программе, получившейся в процессе трансформации. Работа программы продолжается до тех пор, пока не встретится точка возврата управления – далее снова выполняется пункт 3.

Таким образом, выполнение основной программы периодически прерывается, чтобы позволить оптимизатору проанализировать состояние процессора и адаптировать машинный код. Данный подход имеет несколько преимуществ перед классическими способами оптимизации:

  • есть возможность проверять множество вариантов машинного кода и выбирать самый быстрый;

  • можно выполнять профилирование программы в реальном времени и учитывать состояние процессора при оптимизациях;

  • работа производится непосредственно с машинным кодом, а значит, оптимизировать можно любую программу независимо от того, на каком исходном языке программирования она была написана;

  • при интеграции подобия общего машинного языка становится возможной трансляция программы в машинный код других архитектур – то есть код для платформы x86 можно будет запустить, например, на ARM или MIPS;

  • приложение-оптимизатор также может использоваться программистом для поиска возможностей ручной оптимизации программы для целевой платформы.

Предлагаемые способы оптимизации также найдут применение в свете продвижения открытой архитектуры RISC-V, активно разрабатываемой как в России, так и за рубежом.

Какие оптимизации могут быть применены?

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

Каков практический смысл подобных исследований?

В настоящее время практически во всех сферах, связанных с вычислениями, наблюдается рост объёмов обрабатываемой информации, из-за чего растёт и спрос на всё более быстрые вычислители. Для удовлетворения растущих потребностей индустрия микроэлектроники прошла огромный путь с 1950-х годов: от компьютеров на лампах до сложнейших интегральных схем, от отсутствия какой-либо микроархитектуры до суперскалярных конвейерных процессоров со спекулятивным выполнением команд, от вычислителей общего назначения до специализированных в виде ASIC, FPGA, DSP и видеокарт.

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

Возможности ускорения на уровне самих программ, к которым относится и динамическая оптимизация, на данный момент являются наименее исчерпанными, и в то же время одними из самых недорогих. Кроме того, при определённом подходе рассматриваемая концепция позволит не только оптимизировать программу, но и в реальном времени выполнять её трансляцию на другую архитектуру, что особенно актуально в свете продвижения альтернатив x86 в виде ARM и RISC-V. Таким образом, разработка новых методов оптимизации компьютерных программ является актуальной и востребованной.

Презентации

Пульс

реализовано
19 октября 2023

Инициация идеи и проекта

старт акселератора.

Достижения

Участник акселератора ПУТП 2023

Проходит акселерацию

Команда

Контакты

Экспертная система
НАВЕРХ