СКИПОДы 2007 полная версия (1127795), страница 42
Текст из файла (страница 42)
Но отображение структуры задачи на архитектуру системы с помощьютаких операторов требует некоторых усилий при программировании. Параллельнаяпрограмма в этом случае будет громоздкой, плохо отлаживаемой, с неэффективнымотображением структуры алгоритма на структуру системы. Наличие в системе такихсредств как: виртуальные топологии, коллективные взаимодействия, создаваемые136пользователем типы данных и др., значительно повышают уровень параллельногопрограммирования. Виртуальные топологии обеспечивают оптимальное приближениеархитектуры системы к структурам задач при хорошей переносимости задач.Главные цели создания системы параллельного программирования:Создать интерфейс прикладного программирования для МРР систем;Обеспечить возможность эффективных коммуникаций для коммуникации точка-точка,коллективных операций, группы процессов.Допускать удобное сопряжение с языками C, Fortran 77, Fortran 90 и C++;Простой способ создания процессов для модели SPMD (одна программа используется дляобработки разных данных на разных процессорах);Основные понятия языкаГруппа - упорядоченное (от 0 до ранга группы) множество идентификаторов процессовГруппы служат для указания адресата при посылке сообщений (процесс-адресат специфицируется своим номером в группе), определяют исполнителей коллективныхопераций.
Являются мощным средством функционального распараллеливания - позволяютразделить группу процессов на несколько подгрупп, каждая из которых должна выполнятьсвою параллельную процедуру. При этом существенно упрощается проблема адресации прииспользовании параллельных процедур.Контекст - область "видимости" для сообщений, аналогичное области видимостипеременных в случае вложенных вызовов процедур. Сообщения, посланные в некоторомконтексте, могут быть приняты только в этом же контексте. Контексты - также важныесредства поддержки параллельных процедур.Коммуникаторы - позволяют ограничить область видимости (жизни, определения)сообщений рамками некоторой группы процессов, т.е.
могут рассматриваться как пара группа и контекст. Кроме того, они служат и для целей оптимизации, храня необходимыедля этого дополнительные объекты.Имеются предопределенные коммуникаторы (точнее, создаваемые при инициализацииMPI-системы): * MPI_COMM_ALL - все процессы и операции над группами (локальные,без обмена сообщениями), например, Дай размер группы. MPI_GROUP_SIZE(IN group,OUT size) Дай номер в группе обратившегося процесса. MPI_GROUP_RANK(IN group,OUT rank)Основные операции - send, receiveОперации могут быть блокирующими и неблокирующими.В операции send задается:- адрес буфера в памяти;- количество посылаемых элементов;- тип данных каждого элемента;- номер процесса-адресата в его группе;- тег сообщения;- коммуникатор.MPI_SEND(IN start, IN count, IN datatype, IN dest, IN tag, IN comm) Типы данных - свои вMPI, но имеется соответствие между ними и типами Fortran и С.В операции receive задается:- адрес буфера в памяти;- количество принимаемых элементов;- тип данных каждого элемента;- номер процесса-отправителя в его группе;- тег сообщения;- коммуникатор;- ссылка на объект-статус, содержащий необходимую информацию о состоянии ирезультате операции.137Имеется возможность указать "любой отправитель" и "любой тег".Имеется три режима коммуникаций - стандартный, режим готовности и синхронный.В стандартном режиме последовательность выдачи операций send и receive произвольна,операция send завершается тогда, когда сообщение изъято из буфера и он уже можетиспользоваться процессом.В режиме готовности операция send может быть выдана только после выдачисоответствующей операции receive, иначе программа считается ошибочной и результат ееработы неопределен.
В синхронном режиме последовательность выдачи операцийпроизвольна, но операция send завершается только после выдачи и начала выполненияоперации receive. Во всех трех режимах операция receive завершается после получениясообщения в заданный пользователем буфер приема.Неблокирующие операции не приостанавливают процесс до своего завершения , авозвращают ссылку на коммуникационный объект, позволяющий опрашивать состояниеоперации или дожидаться ее окончания. Имеются операции проверки поступающихпроцессу сообщений, без чтения их в буфер (например, для определения длины сообщенияи запроса затем памяти под него).Средства описания и создания процессов в языке Фортран-GNS.Тип данных – TASKIDПо семантике языка Fortran GNS все процессы программы получают уникальные имена системные идентификаторы, по которым производится отождествление корреспондентовпри обмене сообщениями между процессами и в терминах которых задается средавыполнения функций редукции.
Эти имена вырабатываются функцией порожденияпроцессов - встроенной функцией языка NEWTASK. Структура системногоидентификатора определяется реализацией, это имя не имеет внешнего представления.Для манипулирования именами процессов внутри программы в язык Fortran GNS вводитсяновый для Фортрана тип данных - тип TASKID. Значения этого типа представляют собойимена процессов, которые вырабатываются функцией порождения процессов.При статической модели параллелизма системные идентификаторы процессоввырабатываются системой запуска программы и могут быть получены пользователемвстроенными функциями.Добавляется константа .NOTASKID., которая представляет собой "нулевое" значение дляобъектов этого типа.
Данные типа TASKID должны быть описаны в операторе TASKID,синтаксис которого аналогичен синтаксису операторов объявления типа в Фортране 77.Данные этого типа могут использоваться в операторах EQUIVALENCE, но при этом могутбыть эквивалентными только данным типа TASKID. Допускается использование TASKID вкачестве описателя типа подпрограммы-функции.Использование переменных данного типа в операторах СOMMON оговаривается винструкциях по использованию языка на конкретных установках, в них же приводятсяразмеры имени процесса для расчетов длин общих блоков. В реализации на базе ФортранМВК [3] допускается использование данных типа TASKID в общих блоках, их длина - однослово (как у данных типа INTEGER).Для данных типа TASKID определены следующие операции: операции .EQ. , .NE.
иприсваивание (когда операнды операций,левая и правая части операторов присваиванияимеют тип TASKID).Данные типа TASKID используются в операторах передачи/приема сообщений SEND и RECEIVE для задания абонентов - получателя или отправителя . Такие данныемогут также передаваться в качестве параметров процедурам и функциям, а также могутбыть переданы другим процессам с помощью операторов передачи сообщений.138Значения типа TASKID не могут использоваться в списках ввода-вывода, так как неимеют внешнего представления.Начальная инициализация переменных этого типа также, как и других переменныхФортрана, не предусматривается, поэтому использование данных до присваивания имзначений некорректно.
Присвоение начальных значений зтим данным в операторах DATAне предусмотрено.Спецификация данных типа TASKID в виде массива, структура которого совпадает сконфигурацией вычислительной системы, облегчает программирование задачи, например,может унифицировать операторы передачи данных между соседними процессами. В языкеесть возможность заданием идентификатора массива данных типа TASKID указатьмассовую операцию для всех его элементов: в функциях порождения процессов,редукции иоперациях передачи сообщений.
Такая запись может ускорить выполнение программы, таккак такие массовые операции могут выполняться параллельно.Для задания массовых операций над частью массива - подмассива можно присвоитьподмассиву имя оператором EQUIVALENCE, динамическое формирование структурподмассивов можно производить операторами языка Фортран МВК. Например:TASKID T1(100),T2(100),TMDIMENSION TM(100,2)EQUIVALENCE (TM(1,1),T1(1)),(TM(1,2),T2(1))При статической модели параллелизма инициализация данных этого типа производитсяфункциями преобразования номеров виртуальных процессоров в имена задач.3. Задачи и процессыВ языке вводится дополнительный вид программных единиц - программные единицызадачи.
Программа может содержать (помимо традиционных для Фортрана программныхединиц) одну или более программных единиц-задач.Главная программная единица (main program) определяет главный и единственный начальной процесс программы.Эта единица может иметь заголовок:PROGRAM n, где n - имя программы.По Фортрану, заголовок программы может отсутствовать.Имя программы (MAIN при его отсутствии) идентифицирует главную программнуюединицу программы, ссылки на него невозможны. (Конкретные реализации могутразрешать использование этого имени в операторах передачи сообщений в качествеадресата.)При запуске начального процесса ему присваивается другое имя - системныйидентификатор, по которому на него могут ссылаться другие процессы программы припередаче сообщений или при выполнении функций редукции.
Это имя может бытьполучено любым процессом при помощи встроенной функцией MASTER без параметров.Результат функции имеет тип TASKID.Программная единица-задача являются описанием задачи. Вычислительные процессысоздаются по описанию задачи динамически и во время создания им присваиваютсяуникальные имена - системные идентификаторы. По одному описанию задачи может бытьобразовано произвольное число процессов данного класса.Первым оператором программной единицы-задачи является оператор заголовка,имеющий вид: TASK PROGRAM n, где n - имя программной единицы-задачи.В остальном, структура программной единицы-задачи не отличается от структурыглавной программной единицы Фортрана 77. В частности, последним оператором, какобычно, является оператор END.Задачи не могут иметь общей памяти с другими задачами, в частности, с главной,поэтому общие блоки (COMMON-блоки) задач локальны в пределах каждой задачи ипрограммных единицах, которые в ней используются.