Параллелизм уровня программ

 

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

 

Таблица 8
Задача Зрение Манипуляция Движение
Поиск розетки X   X
Движение к розетке X   X
Подключение к розетке X X  

 

Подсистемы достаточно независимы при ведущей роли системы зрения. Воз­можен также и центральный процессор — «мозг». Это пример параллелизма про­грамм, в котором разные задачи выполняются единовременно для достижения об­щей цели.

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

 

For I:=l to N do A(I):=B(I) + C(I)

 

Все суммы независимы, то есть вычисление Вi + Сi не зависит от Bj + Cj для любо­го j < i. Это означает, что вычисления могут производиться в любой последова­тельности и в вычислительной системе с N процессорами все суммы могут быть вычислены одновременно.

Общая форма параллелизма на уровне программ проистекает из разбиения про­граммируемых данных на подмножества. Это разделение называют декомпозицией области (domain decomposition), а параллелизм, возникающий при этом, носит название параллелизма данных. Подмножества данных назначаются разным вы­числительным процессам, и называется этот процесс распределением данных (data distribution). Процессоры выделяются определенным процессам либо по инициа­тиве программы, либо в процессе работы операционной системой. На каждом про­цессоре может выполняться более чем один процесс.