Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ПРО МЕТОДИЧКА.docx
Скачиваний:
27
Добавлен:
09.12.2018
Размер:
953.18 Кб
Скачать

Технологии параллельного программирования

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

  1. возможность создания эффективных программ является серьезным аргументом в выбора;

  2. Возможность быстрого создания параллельных программ должна приниматься в расчет наравне с другими факторами;

  3. Гарантия сохранения эффективности параллельных программ при переноси на другие компьютера.

Выбор технологии параллельного программирования — это и в самом деле вопрос не простой. Если попытаться сделать обзор средств, которые могут помочь в решении задач на параллельном компьютере, то даже поверхностный анализ приведет к списку из более 100 наименований:ADA,CC++, FortranM, Linda ,MPI, ParJava и т.д.

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

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

Но как только вы начнете решать большие задачи и, особенно, предельно большие многовариантные задачи, вопрос эффективности может оказаться ключевым.

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

Использование традиционных последовательных языков

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

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

Чтобы полностью использовать потенциал архитектуры необходимо решить три основные задачи:

  • найти в программе ветви вычислений, которые можно исполнять параллельно;

  • распределить данные по модулям локальной памяти процессоров;

  • согласовать распределение данных с параллелизмом вычислений.

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

Указанные задачи, в самом деле ,крайне сложны. Построить эффективные алгоритмы их решения даже для узкого класса программ очень не просто.

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

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