Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Конспект лекций 1.doc
Скачиваний:
3
Добавлен:
01.05.2025
Размер:
785.92 Кб
Скачать

4.3.3. Параллелизм задач

4.3.3.1. Общая идея

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

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

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

Процесс - некоторая последовательность команд, претендующая наравне с другими процессами программы на использование процессора для своего выполнения. Процесс характеризуется:

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

  • соответствующей ему памяти, то есть множеством данных, которыми этот процесс может манипулировать;

  • дескриптором процесса, то есть совокупностью сведений, определяющих состояние ресурсов, предоставленных процессу.

Выделяют два вида процессов:

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

Легковесные процессы (threads – нити, потоки), называемые еще сопроцессами, не имеют собственных защищенных областей памяти. Они работают в мультипрограммном режиме одновременно с активировавшей их задачей и используют ее виртуальное адресное пространство, в котором им при создании выделяется участок памяти под динамические данные (стек), то есть они могут обладать собственными локальными данными. Сопроцесс описывается как обычная функция, которая может использовать статические данные программы.

По сравнению с подходом, основанным на параллелизме данных, данный подход более трудоемкий, с ним связаны следующие проблемы:

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

  • на программиста ложится вся ответственность за равномерную загрузку процессоров параллельного компьютера;

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

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

Привлекательными особенностями данного подхода являются большая гибкость и большая свобода, предоставляемая программисту в разработке программы, эффективно использующей ресурсы параллельного компьютера и, как следствие, возможность достижения максимального быстродействия. Примерами специализированных библиотек являются библиотеки MPI (Message Passing Interface) и PVM (Parallel Virtual Machines).

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

  • модель процесс/канал;

  • модель основанная на обмене сообщениями;

  • модель с общей памяти;