СТРУКТУРИЗАЦИЯ И ВЫПОЛНЕНИЕ ПАРАЛЛЕЛЬНЫХ ПРОГРАММ

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

Использованию иерархической структуры алгоритма, сопод­чинению операторов при выполнении программы соответству­ет стековый принцип обработки информации. Действительно, выполнение процедуры в процедуре при описании соответству­ет переходу на новый лексико-графический уровень. В процес­се счета требуется прерывание выполнения одной процедуры, запоминание на момент прерывания всей относящейся к ней информации и инициализация вложенной процедуры. Такие действия равносильны работе со стеком, где переход на новый лексико-графический уровень соответствует понижению пре­рванного выполнения процедуры на один уровень, началу вы­полнения на вершине стека работ более высокого уровня, а за­тем обратному сдвигу для продолжения выполнения прерван­ной процедуры. Поскольку число уровней может быть произ­вольным, то и глубина погружения в стеке может быть значи­тельной. Преимущественное использование принципа проце­дурного программирования для выделения элементарных работ, выполнение которых в ВС подлежит планированию, поставило бы программиста в большую зависимость от возможностей раз­биения алгоритма на процедуры, от предполагаемого объема процедур, усложнило бы работу механизмов распределения ре­сурсов. Это определило целесообразность представления алго­ритма в виде одного или нескольких взаимодействующих про­цессов. Процессы - логически завершенные, преимущественно значительные по объему работы, на которые можно и целесооб­разно разбить выполняемый алгоритм. При формировании про­цессов основополагающими являются требования оптимальной сегментации программ для распределения работ между средства­ми ВС и распределения ресурсов ВС в ходе выполнения несколь­ких процессов. Порядок выполнения процессов также подчи­няется стековому принципу. Одновременно между процессами существует два вида зависимости: процессы могут быть явно зависимыми (влиять на порядок работы друг друга, порождать и ликвидировать друг друга); зависимость может реализовывать-ся операционной системой, управляющей ресурсами. В первом случае процессы, как правило, объединены в рамках одной за­дачи и используют закрепленную за этой задачей память. Это позволяет строить сложные программные системы. Во втором случае оказывается возможным организация совместных работ многих пользователей. Выполнение процессов может чаще всего происходить и прерываться в стековом порядке: последний пре­рван - первый восстанавливается. На этот порядок накладыва­ется дисциплина приоритетов. Абсолютизация стекового прин­ципа соответствует природе большинства вычислительных про­цессов.