Архитектура параллельных вычислений

Автор: Пользователь скрыл имя, 15 Сентября 2011 в 17:02, курсовая работа

Краткое описание

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

Файлы: 1 файл

Parallel programming architecture.docx

— 1.07 Мб (Скачать)

      Кроме этих процедур имеются также процедуры

MPI_ANY_SOURCE и MPI_ANY_TAG для приема сообщений  от любых источников с любыми  тэгами.

      Основными процедурами для коллективных обменов  между процессами являются барьерная  процедура MPI_BARRIER, широковещательная  процедура MPI_BCAST, процедура сбора  данных MPI_GATHER, процедура раздачи  данных MPI_SCATTER, процедура сбора и раздачи данных всем процессам MPI_ALLGATHER.

      Барьерная синхронизация всей группы процессов  осуществляет процедура MPI_BARRIER с обращением вида MPI_BARRIER (comm),

где comm- коммуникатор группы.

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

      Передачу  сообщения от одного процесса ко всем остальным процессам группы называют широковещательной (broadcast) передачей; она реализуется процедурой MPI_BCAST с помощью вызова

      MPI_BCAST (buffer, count, datatype, root, comm),

где

      buffer- начальный адрес буфера;

      count- число элементов в буфере;

      datatype- тип передаваемых элементов;

      root- номер передающего процесса;

      comm- коммуникатор группы.

Сбор  данных со всех процессов группы в  один процесс этой группы осуществляет процедура MPI_GATHER с использованием вызова

      MPI_GATHER (sendbuffer, sendcount, sendtype, recbuffer,

            reccount, rectype, root, comm),

где

      sendbuffer- начальный адрес посылающего буфера;

      sendcount- число элементов в посылающем буфере;

      sendtype- тип посылаемых элементов;

      recbuffer- начальный адрес принимающего буфера;

      reccount- число элементов в принимающем буфере;

      rectype- тип принимаемых элементов;

      root- номер передающего процесса;

      comm- коммуникатор группы.

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

      MPI_SCATTER(sendbuffer, sendcount, sendtype, recbuffer,

            reccount, rectype, root, comm),

где

      sendbuffer- начальный адрес посылающего буфера;

      sendcount- число элементов в посылающем буфере;

      sendtype- тип посылаемых элементов;

      recbuffer- начальный адрес принимающего буфера;

      reccount- число элементов в принимающем буфере;

      rectype- тип принимаемых элементов;

      root- номер передающего процесса;

      comm- коммуникатор группы.

Сбор  данных из всех процессов группы и  размещение результата во всех процессах  группы позволяет реализовать процедура  MPI_ALLGATHER с помощью обращения

      MPI_ALLGATHER(sendbuffer, sendcount, sendtype, recbuffer,

            reccount, rectype, root, comm),

где приняты  прежние обозначения.

      Раздачу и сборку данных из всех процессов  группы и размещение во всех процессах  группы позволяет реализовать процедура MPI_ALLTOALL (см. Листинг 10) с помощью обращения

      MPI_ALLTOALL (sendbuffer, sendcount, sendtype,

            recbuffer, reccount, rectype, root, comm).

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

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

Технология  программирования DVM. Принципы

      Модель  Digital Virtual machine (DVM) положена в основу Fortran-DVM и C-DVM, разработанных в Институте прикладной математики Российской Академии Наук (ИПМ РАН).

      При проектировании реализованы следующие  принципы.

      1. Система базируется на высокоуровневой  модели выполнения

программы, которая привычна для прикладного  программиста.

      2. Спецификации параллелизма остаются  невидимыми для

обычных компиляторов Fortran-77 и С.

      3. Языки распараллеливания предлагает  программисту модель

программирования, близкую к модели исполнения.

      4. Основная работа по реализации  модели выполняется системой  поддержки распараллеливания DVM.

      Система DVM базируется на библиотеке MPI (Message Passing Interface) для обеспечения высокой степени переносимости программ. Для повышения надежности работы в настоящее время разрабатывается поддержка DVM-программ с помощью стандарта Open MP.

      Все DVM-директивы оформлены в виде строк, начинающихся любым из символьных сочетаний CDVM$, *DVM$ или !DVM$. Синтаксис  и семантика директив в языках Fortran-DVM и С-DVM практически совпадают.

      Модель  выполнения DVM-программы описывается  следующим образом.

      1. DVM-программа выполняется на виртуальной  многопроцессорной системе (MPI-машине, PVM-машине и т.п.).

      2. Виртуальная многопроцессорная  система представляется в виде  многомерной решетки процессоров.

      3. В момент запуска DVM-программа  начинает свое выполнение сразу  на всех процессорах виртуальной  вычислительной системы, причем  в это же время присутствует  единственный поток управления (единственная  ветвь).

      4. DVM допускает ограниченную иерархию  параллелизма:

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

      - в конце ветвей может быть  выполнена глобальная операция  редукции;

      - в каждой ветви могут дополнительно  выделяться параллельные циклы.

      Никакие другие варианты иерархии параллелизма не допускаются.

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

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

      7. Любой оператор присваивания  выполняется по правилу "собственных  вычислений": он выполняется тем  процессором, на котором распределена  переменная, стоящая в левой части  оператора присваивания.

      Отображение задач в DVM.

      Набор задач, обрабатываемых системой, задается вектором задач T, -я компонента которого определяет задачу с номером .

      Для отображения задач на секции решетки  виртуальных процессоров используется директива MAP в следующем виде

      CDVM$ MAP T(n) ONTO ,

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

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

      Для сопоставления блоков программы  задачам существует две формы  отображения: статическая и динамическая. Статическая форма аналогична параллельной секции в Open MP (аналогично директиве SECTIONS), и здесь она выглядит так

      C описание массива задач

      CDVM$ TASK MB(3)

      ......................

      CDVM$ TASK_REGION MB

      CDVM$ ON MB(1)

      CALL JACOBY(A1,B1,M1,N1)

      CDVM$ END ON

      CDVM$ ON MB(2)

      CALL JACOBY(A2,B2,M2,N2)

      CDVM$ END ON

      CDVM$ ON MB(3)

      CALL JACOBY(A3,B3,M3,N3)

      CDVM$ END ON

      CDVM$ END TASK_REGION

В динамической форме каждая операция цикла отображается на задачу (на секцию процессоров). Например,

      CDVM$ TASK_REGION MB

      CDVM$ PARALLEL(I) ON MB(I)

      DO I=1,NT

      ...............

      END DO

      CDVM$ END TASK_REGION 

Программирование  на MC#. Введение

         Язык параллельного  программирования MC# предназначен  для написания программ, работающих на всём спектре параллельных архитектур – от многоядерных процессоров до Grid-сетей. Единственное требование к таким системам со стороны MC# - на них должна быть установлена среда исполнения CLR (Common Language Runtime) с соответствующим набором библиотек. На машинах с операционной системой Windows реализацией такой среды является Microsoft .NET Framework, а на машинах с операционной системой Linux – система Mono, которая является свободной реализацией платформы .NET для Unix-подобных систем.

         В случае языка MC#, программист может предусмотреть исполнение автономных асинхронных методов либо локально, либо удаленно. В последнем случае, метод может быть спланирован для исполнения на другой машине, выбираемой двумя способами: либо согласно явному указанию программиста (что не является типичным случаем), либо автоматически (обычно, на наименее загруженном узле кластера или машине Grid-сети). Взаимодействие асинхронных методов, в рамках языка MC#, реализуется посредством передачи сообщений с использованием каналов и обработчиков канальных сообщений. Эти каналы и обработчики определяются в MC#-программах с помощью связок в стиле языка Polyphonic C#.

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

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

         Разделение всех методов в программе на обычные (синхронные) и асинхронные производится программистом с использованием специальных ключевых слов async и movable. (В языке MC#, семантика и использование ключевого слова async полностью совпадает с использованием этого слова в языке Polyphonic C# за тем исключением, что в MC# async-методы не могут встречаться в связках – см. об этом ниже). 

Информация о работе Архитектура параллельных вычислений