ИТМиВТ - Институт точной механики и вычислительной техники С. А. Лебедева РАН
Институт точной механики и вычислительной техники им. С. А. Лебедева РАН - научно-исследовательский институт в области информационных технологий, вычислительной техники и микроэлектроники
English
Главная страница Контактная информация Карта сайта и поиск
Об институте Решения Проекты Образование

Строительные блоки

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

Блоки реализованы на языке C++. Документация создается в автоматической системе документирования Doxygen. Вся документация размечена XML тегами, что позволяет скомпилировать документацию для разных целей в разных видах с разным уровнем детализации.

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

На настоящий момент блоки уже оттестированы в технологической цепочке компиляторов GCC. Компиляция с языков C, C++, FORTRAN оттестирована в целевую архитектуру x86. Мы сейчас можем производить тестирование в любую целевую архитектуру, поддержанную в технологической цепочке GCC — x86, Itanium, SPARC, MIPS, PowerPC, Cell. Все известные архитектуры поддерживаются GCC.

Замкнутые блоки оптимизаций, которые можно применять в составе любого существующего оптимизирующего компилятора, такие как оптимизатор потока данных программы, оптимизатор потока управления программы, параллелизатор на уровне инструкций (SIMD (SSA/MMX)), параллелизатор на уровне процессов (multi threading, MPI, OPM), оптимизатор высокого уровня, планировщик для архитектур статического планирования и т.д. Каждая отдельно взятая оптимизация может рассматриваться как объект продажи.

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

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

Анализатор

Анализатор является мощным инструментом, выполняющим следующие анализы:

  • анализ потока данных — Нумерация значений (Data Flow Analyzer — Value Numbering)
  • анализ Потока Управления (Control Flow Analyzer)
  • обнаружение инвариантов циклов (Loop invariants detection)
  • обнаружение индуктивных переменных (Inductive variables detection)
  • анализ зависимостей в гнездах циклов (Loop data dependence analysis)
  • локальный анализ указателей (Local points-to analysis)
  • ациклический анализ потока данных (Acyclic data dependence analysis)
  • межпроцедурный анализатор потока управления (Interprocedural Control Flow Analyzer)
  • межпроцедурный анализатор потока данных — Анализ, чувствительный к контексту и потоку управления — константы, выравнивания, диапазоны, указатели (Interprocedural Data Flow Analyzer Flow/Context Sensitive/Insensitive Propagator — constants, alignments, ranges, points-to)
  • нумерация значений (Value Numbering)
  • моделирование динамической памяти (Heap modeling)
  • статическое профилирование (Static Profiler)

Автоматический распараллеливатель

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

Обеспечивается и поддерживается три способа портирования функциональности на любую существующую технологическую цепочку:

  • через базу данных — файловое представление программной семантики, языков на входе (C, C++ и т.д.), информации (имена, типы и т.д.) и модели целевой архитектуры;
  • через наш собственный развитый промежуточный язык;
  • через нашу функциональность как надстройку над пользовательскими внутренними структурами (IL, CFG и т.д.).

Оптимизатор

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

 

© 1948—2016 «ИТМиВТ»
Версия для печати Контактная информация