Вы здесь

Методы распараллеливания программ в оптимизирующем компиляторе

Рассматриваются методы распараллеливания программ в оптимизирующем компиляторе, использующие параллелизм операций, коротких векторов и параллельных потоков управления. Предложенные методы являются достаточно универсальными, т.к. они практически применяются для двух архитектурных платформ: «Эльбрус» с явным параллелизмом операций и «МЦСТ-R» с суперскалярным (в исходном порядке) выполнением операций, при этом обе платформы содержат короткие (несовпадающие) векторные операции и поддерживают многопроцессорность на общей памяти. Приводятся результаты практического использования данных методов распараллеливания.

Большинство современных микропроцессорных архитектур использует различные методы повышения производительности исполняемых программ за счет их распараллеливания, а именно:

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

Эти методы распараллеливания требуют поддержки в оптимизирующих компиляторах, т.к. обычные языки программирования, такие как C, C++, Fortran (начиная с Fortran-90, есть операции над векторами), являются языками последовательного программирования. В работе рассматриваются методы распараллеливания программ в компиляторах, которые ориентируются на аппаратную поддержку указанных видов параллелизма. Для исследования используется оптимизирующий компилятор с языков C, C++, Fortran, реализованный для микропроцессорных архитектур «Эльбрус» и «МЦСТ-R» (совместима с архитектурой SPARC) [1]. Обе архитектуры поддерживают конвейерное параллельное исполнение операций, набор целочисленных и вещественных операций над короткими векторами, а также многоядерность и многопроцессорность на общей памяти с когерентным доступом.

Результаты представлены для архитектуры «Эльбрус» (т.к. она обеспечивает наиболее полную аппаратную поддержку данных видов параллелизма и поддержку со стороны оптимизирующего компилятора) и вычислительного комплекса (ВК) «Эльбрус-3М1» [2]. Наиболее универсальный вид распараллеливания (на уровне операций) представлен на задачах пакета SPECcpu2000 [3], а результаты векторизации и распараллеливания на потоки управления – на отдельных задачах пакетов SPEC и на высокопроизводительных библиотеках, в которых доминируют вычисления в циклах.

Подробнее... Загрузить файл 

Содержание:

Введение

1. Распараллеливание на уровне операций

1.1. Программы со сложным управлением

1.2. Программы с обработкой в циклах

1.3. Результаты распараллеливания на уровне операций

1.3.1. Целочисленные задачи

1.3.2. Вещественные задачи

2. Автоматическая векторизация

2.1. Базовые средства векторизации

2.2. Вспомогательные преобразования

2.3. Векторизация рекуррентных выражений

2.4. Векторизация циклов с разветвлениями управления

2.5. Экспериментальные результаты

3. Автоматическое распараллеливание на потоки управления

3.1. Общее описание функциональности 

3.2. Техника автоматического распараллеливания

3.3. Библиотека поддержки для автоматического распараллеливания

3.4. Результаты применения автоматического распараллеливания

Заключение

Литература

В.Ю. Волконский
А.В. Брегер
А.Ю. Бучнев
А.В. Грабежной
А.В. Ермолицкий
Л.Е. Муханов
М.И. Нейман-Заде
П.А. Степанов
О.А. Четверина