Технологии автоматического дедуктивного распараллеливания в языке Planning C
Реклама. ООО «ЛитРес», ИНН: 7719571260.
Оглавление
Владимир Викторович Пекунов. Технологии автоматического дедуктивного распараллеливания в языке Planning C
Введение
Глава 1. Подходы к распараллеливанию императивных программ
1.1. Обзор подходов к автоматическому/автоматизированному распараллеливанию
1.2. Выбор платформы автоматизации распараллеливания и средств распараллеливания
Выводы к первой главе
Глава 2. Встроенная трансформация программ в языке Planning C
2.1. Дедуктивные макромодули: средства решения задач распараллеливания и генерации выходной программы
2.1.1. Синтаксис и семантика макромодуля
2.1.2. Расширение базовой семантики макромодуля: порождающее программирование
2.1.3. Некоторые простые примеры логического порождающего программирования на базе макромодулей
2.2. Средства анализа входной программы и согласование работы макромодулей
2.2.1. Расширенная схема препроцессинга
2.2.2. Управление препроцессингом
2.2.3. Сканирующие макросы
2.2.3.1. Синтаксис
2.2.3.2. Теоретические аспекты
2.2.4. Пример простого языкового расширения
Выводы ко второй главе
Глава 3. Автоматическое распараллеливание на базе трансформации программ
3.1. Распараллеливание в стиле Cilk++
3.1.1. Распараллеливание по задачам
3.1.1.1. Статический анализ кода
3.1.1.2. Динамический анализ кода и распараллеливание
3.1.2. Распараллеливание по виткам цикла
3.1.2.1. Статический анализ кода
3.1.2.2. Динамический анализ и распараллеливание
3.1.3. Обобщенный алгоритм распараллеливания
3.1.4. Архитектура параллелизатора
3.1.5. Апробация
3.2. Распараллеливание в стиле сверхоптимистичных вычислений
3.2.1. Теория сверхоптимистичных вычислений
3.2.2. Распараллеливание циклов
3.2.3. Архитектура параллелизатора
3.2.4. Апробация
3.3. Распараллеливание циклов на векторных расширителях
3.3.1. Технология оптимизирующей векторизации циклов
3.3.1.1. Основная идея
3.3.2. Конструкции оптимизирующей векторизации в Planning C
3.3.2.1. Векторизация циклов
3.3.2.2. Маркировка функций для автоматической расстановки характерных точек
3.3.3. Пример простейшей программы с векторизуемым циклом
3.3.4. Автоматическое распараллеливание циклов
3.3.5. Архитектура параллелизатора
3.3.6. Апробация
Выводы к третьей главе
Заключение
Библиографический список
Отрывок из книги
В настоящее время активно развиваются технологии, связанные с решением ряда интеллектуальных задач, подразумевающих обработку больших массивов структурированных или слабо структурированных данных с применением более или менее трудоемких логических [12], символьных [11] или численных алгоритмов (см., например, [2, 14, 21]. Это, в первую очередь, технологии интеллектуальной обработки данных, к которым относятся разнообразные алгоритмы поиска логических и/или математических формальных закономерностей в данных (Big Data/Data Mining [7, 22]): деревья решения, машины поддерживающих векторов [22], нейронные сети [22, 24], МГУА [7] и иные интерполяторы и экстраполяторы [11]. Во вторую очередь, назовем элементы технологий поддержки диалога с пользователем на естественном языке (см., например, [22]). Далее назовем ряд технологий математического моделирования различных процессов, например, в сплошных средах: моделирования образования и распространения загрязнений [10, 13, 14, 35], прогнозирования погоды [41], прогнозирования изменений климата [6, 41], моделирования обтекания различных технических объектов [28], прочностные и иные трудоемкие расчеты, связанные с моделированием (см., например, [5]).
Решение (даже частичное) подавляющего большинства перечисленных выше проблем подразумевает выполнение огромных объемов расчетов. Неудивительно, что для осуществления подобных расчетов наиболее часто применяются параллельные или распределенные системы [4, 27], способные их выполнить за разумное время. Программирование таких систем, особенно в случае нетривиальных алгоритмов, является достаточно сложной задачей, к решению которой часто привлекаются специалисты в области параллельных/распределенных вычислений. Однако и в этом случае разработка и реализация параллельных алгоритмов занимает достаточно большое количество времени и требует тщательной отладки.
.....
Далее, следует отметить, что в последние десятилетия в практике параллельных вычислений достаточно широко используются векторные расширители (обычные процессоры с векторными инструкциями или многоядерные видеокарты с потоковыми процессорами SIMT-архитектуры). В данной работе мы можем попытаться разработать, например, такие средства автоматического распараллеливания циклов для работы на векторных расширителях, которые (что является достаточно новой задачей) в значительной степени нивелируют (автоматически) фактор замедления исполнения (характерный для SIMT-режима), обусловленный наличием расходящихся трасс потоков различных итераций цикла. Как и в случае машин на обычных процессорах, чтобы добиться максимально возможной многоплатформенности, целесообразно опираться на некие стандартизованные средства распараллеливания, такие как OpenCL [39].
Перейдем к выбору платформы для подсистемы автоматизации распараллеливания, которая, как уже было решено выше, должна быть реализована в виде некоего пакета языковых расширений для стандартного компилятора. Такой компилятор, как следует из вышеизложенного, как минимум, должен допускать подобные высокоуровневые расширения и иметь стандартные средства распараллеливания, использующие OpenMP и OpenCL, а также позволять генерировать выходной код, выходящий за рамки классического C/C++, чтобы обеспечить возможность вставки директив распараллеливания Cilk++.
.....