Локальная архивная копия страницы. Оригинал страницы находится по адресу:
https://web.archive.org/web/20140625064138/http://mcst.ru:80/sistema_programmirovaniya

Система программирования

Система программирования для платформ Эльбрус и МЦСТ-R предназначена для создания собственных программных продуктов для этих платформ на языках программирования С/С++ и Fortran. В состав системы программирования входят:

  • оптимизирующий компилятор;
  • отладчик;
  • профилировщик;
  • набор библиотек поддержки;
  • оптимизированная математическая библиотека;
  • библиотека MPI.

Оптимизирующий компилятор lcc

В общем случае, компилятор – программа, преобразующая написанный на языке высокого уровня исходный текст в текст на низкоуровневом языке, близком к машинному коду. Оптимизирующий компилятор для языков С, С++, Fortran в составе программного обеспечения МЦСТ способен формировать двоичный код для целевых платформ, соответствующим всем  моделям микропроцессоров, разработанных в МЦСТ.  Имеются варианты компилятора для работы на целевой платформе и в режиме кросс-компиляции.

Поясним термин «оптимизация». Критерием эффективности является время исполнения кода программы. Чем меньше время исполнения программы, тем более эффективным считается её код. В процессе работы компилятор может выполнять над алгоритмом программы различные преобразования, которые могут привести к формированию более эффективного кода. Эти преобразования называются оптимизирующими преобразованиями, или оптимизациями. Строго говоря, применение оптимизаций вовсе не гарантирует повышение эффективности. Всё зависит от исходного алгоритма. Тем не менее, правильный подбор оптимизирующих преобразований может серьёзно уменьшить время исполнения задачи.

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

Процесс компиляции состоит из последовательных стадий (фаз компиляции), исполняемых в автоматическом режиме. Первой фазой работы компилятора является препроцессор. Препроцессор обеспечивает корректное подключение заголовочных файлов к исходной программе. На выходе препроцессора формируется преобразованный текст исходной программы, в котором раскрыты все макроопределения, удалены комментарии и фрагменты, на которые распространилось действие условной трансляции. На второй фазе компиляции (транслятор) происходит непосредственное преобразование алгоритма, написанного на языке высокого уровня, в алгоритм, выраженный в терминах команд микропроцессора. На фазе трансляции происходят все оптимизирующие преобразования. Кроме исходного текста, транслятор может использовать дополнительную информацию о программе (профиль исполнения и др.). На выходе транслятор формирует последовательность команд микропроцессора, представленных в виде двоичного кода. Результатом работы транслятора является файл объектного кода. Завершающая фаза – редактирование связей или линковка. Для этого компилятор вызывает штатно установленную в системе программу – редактор связей. Компилятор автоматически передаёт редактору связей соответствующие параметры, заданные в командной строке, а также те, что необходимо задать по умолчанию.

Компилятор производит оптимизации не произвольным образом, а в составе некоторого согласованного пакета оптимизаций. Предусмотрено несколько таких пакетов или уровней оптимизаций. Каждому уровню оптимизации присвоен свой номер. Уровень с большим номером включает в себя уровень с меньшим номером. Базовый уровень имеет номер 0 и выполняется всегда. Код, полученный с использованием базового уровня оптимизаций, называется неоптимизированным. 

Уровень оптимизации

Описание оптимизаций

O0

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

O1

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

O2

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

O3

Все межпроцедурные оптимизации, возможность оптимизации в режиме «вся программа», все цикловые оптимизации.