Санкт-Петербургский государственный университет
Опубликован: 11.02.2010 | Доступ: свободный | Студентов: 530 / 93 | Оценка: 4.41 / 4.44 | Длительность: 08:19:00
Специальности: Программист
Лекция 1:

Введение

Лекция 1: 1234 || Лекция 2 >
Аннотация: В данной лекции дается краткое введение в параллельное программирование, приводится описание моделей параллельного программирования и специфики проектирования параллельных алгоритмов и программ

Последовательная и параллельная модели программирования

Модель программирования - это совокупность приемов программирования, отвечающих архитектуре абстрактного компьютера, предназначенного для выполнения определенного класса алгоритмов. Модель программирования основана на определенном представлении о логической организации компьютера, его архитектуре. Существуют различные архитектуры, и одной из схем их классификации является таксономия Флинна, основанная на описании работы компьютера с потоками команд и данных (рис. 1.1 - 1.5).

Параметры классификации Флинна

Рис. 1.1. Параметры классификации Флинна
Архитектура SISD (Single Instruction Stream - Single Data Stream) - один поток команд и один поток данных

Рис. 1.2 . Архитектура SISD (Single Instruction Stream - Single Data Stream) - один поток команд и один поток данных
Архитектура SIMD (Single Instruction Stream - Multiple Data Stream) - один поток команд и несколько потоков данных

Рис. 1.3 . Архитектура SIMD (Single Instruction Stream - Multiple Data Stream) - один поток команд и несколько потоков данных
Архитектура MISD (Multiple Instruction Stream - Single Data Stream) - несколько потоков команд и один поток данных

Рис. 1.4 . Архитектура MISD (Multiple Instruction Stream - Single Data Stream) - несколько потоков команд и один поток данных
Архитектура MIMD (Multiple Instruction Stream - Multiple Data Stream) - несколько потоков команд и несколько потоков данных

Рис. 1.5 . Архитектура MIMD (Multiple Instruction Stream - Multiple Data Stream) - несколько потоков команд и несколько потоков данных

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

Информационный граф программы

Рис. 1.6. Информационный граф программы

Каждый узел можно охарактеризовать парой (n, s), где n - имя узла, s - его размер. Размер узла определяется количеством элементарных операций, входящих в его состав. Дуга характеризуется парой (v, d), где v - пересылаемые данные, а d - время, затрачиваемое на ее пересылку.

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

Предельные случай информационного графа программы

увеличить изображение
Рис. 1.7. Предельные случай информационного графа программы

Для последовательной модели программирования характерны следующие особенности:

  • относительно невысокая производительность;
  • применение стандартных языков программирования;
  • хорошая переносимость программ на уровне исходного кода.

Параллельная модель программирования характеризуется:

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

При разработке параллельных приложений возникают и специфические для параллельной модели программирования проблемы:

  • управление работой множества процессов;
  • организация межпроцессных пересылок данных;
  • вероятность тупиковых ситуаций (взаимных блокировок). Блокировки возникают, если процесс или поток ожидает доступ к ресурсу, заблокированному другим процессом, блокируя, в свою очередь, доступ к ресурсу, требуемому для продолжения работы второго процесса или потока;
  • нелокальный и динамический характер ошибок. Процессы или потоки выполняются на разных процессорах или ядрах. Загрузка вычислительных узлов изменяется с течением времени, поэтому для обеспечения корректной работы параллельной программы может потребоваться явная синхронизация;
  • утрата детерминизма (предсказуемого поведения программы в процессе ее исполнения). Параллельная программа может давать разные результаты при повторных запусках даже без модификации кода и исходных данных. Это является следствием "гонок за данными" - одновременного и асинхронного доступа разных процессов или потоков к общим переменным;
  • необходимость заботиться о масштабируемости программы (масштабируемость -это свойство вычислительной системы, компьютерной сети или процесса/процессов, которое заключается в сохранении способности эффективно работать при возрастании их сложности);
  • необходимость заботиться о сбалансированной загрузке вычислительных узлов.
Лекция 1: 1234 || Лекция 2 >