ПАРАЛЛЕЛЬНАЯ ОБРАБОТКА ДАННЫХ
Методические указания
к курсовой работе
для студентов направления
подготовки 230.100.62 – «Информатика
и вычислительная техника»
Составители:
А. С. Мирошников, С. В. Гречаный
Владикавказ 2014
0
МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РФ
Федеральное государственное бюджетное образовательное учреждение высшего профессионального образования
«СЕВЕРО-КАВКАЗСКИЙ ГОРНО-МЕТАЛЛУРГИЧЕСКИЙ ИНСТИТУТ
(ГОСУДАРСТВЕННЫЙ ТЕХНОЛОГИЧЕСКИЙ УНИВЕРСИТЕТ)»
Кафедра «Автоматизированная обработка информации»
ПАРАЛЛЕЛЬНАЯ ОБРАБОТКА ДАННЫХ
Методические указания к курсовой работе для студентов направления подготовки 230.100.62 – «Информатика и вычислительная техника»Составители:
А. С. Мирошников, С. В. Гречаный Допущено редакционно-издательским советом Северо-Кавказского горно-металлургического института (государственного технологического университета).
Протокол заседания РИСа № 26 от 17.12.2013 г.
Владикавказ УДК 004. ББК 32. М Рецензент:
Кандидат технических наук, доцент Северо-Кавказского горно-металлургического института (государственного технологического университета) Будаева А. А.
Параллельная обработка данных: Методические укаМ зания к курсовой работе для студентов направления подготовки 230.100.62 – «Информатика и вычислительная техника» / Сост.: А. С. Мирошников, С. В. Гречаный; СевероКавказский горно-металлургический институт (государственный технологический университет). – Владикавказ: Северо-Кавказский горно-металлургический институт (государственный технологический университет). Изд-во «Терек», 2014.
– 24 с.
Методические указания предназначены для выполнения курсовой работы по курсу "Параллельная обработка данных" для студентов специальности 230100.62 – «Информатика и вычислительная техника» квалификации – бакалавр. Методические указания содержат примеры исходного кода программ с параллельной архитектурой для выполнения курсовой работы и темы курсовых работ.
Подготовлено кафедрой «Автоматизированная обработка информации».
УДК 004. ББК 32. Редактор: Иванченко Н. К.
Компьютерная верстка: Куликова М. П.
Составление. ФГБОУ ВПО «Северо-Кавказский горно-металлургический институт (государственный технологический университет)», Мирошников А. С., Гречаный С. В., составление, Подписано в печать 6.05.2014. Формат 60х84 1/16. Бумага офсетная. Гарнитура «Таймс». Печать на ризографе. Усл. п.л. 1,4. Тираж 15 экз. Заказ №.
Северо-Кавказский горно-металлургический институт (государственный технологический университет). Издательство «Терек».
Отпечатано в отделе оперативной полиграфии СКГМИ (ГТУ).
362021, г. Владикавказ, ул. Николаева, 44.
Стандарт MPI Стандарт MPI-1 включает в себя следующие базовые функции:
1. Управление вычислительным окружением, 2. Передача сообщений типа "точка-точка", 3. Коллективные операции взаимодействия, 4. Использование производных типов данных, 5. Управление группами и коммуникаторами, 6. Виртуальные топологии.
Отличительная особенность программ, написанных с использованием стандарта MPI-1, состоит в том, что в них допускается только статическое распараллеливание, т. е. количество параллельных процессов во время запуска и исполнения программы фиксировано.
Стандарт MPI-2, помимо функциональности стандарта MPI-1, включает в себя функции:
– динамического порождения процессов, – однонаправленной передачи сообщений, – расширенных коллективных операций, – параллельного ввода/вывода.
Кроме реализаций MPICH и MPICH-2 Аргонской национальной лаборатории, на которых базируется MS MPI, имеется еще множество других реализаций стандарта MPI, как коммерческих, так и свободно доступных. Примером коммерческой версии является система ScaMPI фирмы Scali, ориентированная, в частности, на поддержку быстрогоинтерконнектаSCI. Примером широко используемой свободно доступной реализации является система LAM MPI, разработанная в Суперкомпьютерном центре штата Огайо, США.
В последующих разделах будут изложены основные функции стандарта MPI-1 и способы их применения, а также даны сведения об отладке MPI-программ c использованием VisualStudio 2005.
Функции управления вычислительным окружением Команды (функции) управления вычислительным окружением стандарта MPI используются для целого ряда целей, таких как инициализация и завершение работы MPI-окружения, получение информации о свойствах и параметрах этого окружения и др.
Наиболее часто используемые функции (в формате языка С) перечисляются ниже:
Эта функция инициализирует MPI-окружение. Она должна вызываться в каждой MPI-программе до вызова любых других MPIфункций, и, кроме того, она должна вызываться только один раз. В Спрограммах эта функция обычно используется для передачи аргументов командной строки каждому из параллельных процессов, хотя это не требуется стандартом MPI и зависит от реализации стандарта.
Форматвызова:
2. MPI_Initialized Эта функция определяет вызывалась ли функция инициализации MPI_Init, и возвращает флаг в виде логической истины (1) или логической лжи(0). Необходимость этой функции обусловлена тем, что в сложных программах разные модули могут требовать использования MPI и, так как функция MPI_Init может быть вызвана один раз и только раз каждым процессом, то указанная функция помогает модулю решить нужно ли вызывать MPI_Init или же окружение MPI уже было проинициализировано другим модулем.
Форматвызова:
3. MPI_Finalize Эта функция завершает работу вычислительного окружения MPI. Вызов этой функции должен быть последним обращением к какой-либо MPI-функции в программе: после нее никакая другая MPI-функция вызвана быть не может.
Формат вызова:
4. MPI_Comm_size Все параллельные процессы, из которых состоит MPI-программа, объединяются в группы, которые управляются так называемыми коммуникаторами (communicators). Именно коммуникаторы обеспечивают взаимодействие параллельных процессов внутри группы.
Функция MPI_Comm_size определяет количество процессов в группе, связанной с данным коммуникатором. Специальный встроенный коммуникатор с именем MPI_COMM_WORLD управляет всеми MPI-процессами в приложении, и потому чаще всего используется в качестве аргумента в данной функции:
Ранг процесса часто используется для управления исполнением программы, а также для указания отправителя и получателя сообщений, пересылаемых между MPI-процессами.
Данная функция определяет ранг вызывающего процесса внутри группы, связанной с заданным коммуникатором. В разных коммуникаторах, в общем случае, MPI-процесс имеет различные ранги.
Формат вызова:
Методы передачи данных в MPI: "точка-точка" и радиовещательные (broadcast) сообщения Операции передачи данных в MPI типа "точка-точка" представляют собой передачу сообщений между, в точности, двумя MPIпроцессами. Один процесс при этом выполняет команду Send (послать), тогда как другой процесс выполняет команду Receive (принять).
Выполнение команд Send и Receive осуществляется посредством вызова соответствующих MPI-функций, которые имеют различные типы, или, другими словами, различное назначение:
• Блокирующий Send / блокирующий Receive • Неблокирующий Send / неблокирующий Receive • Синхронный Send • Буферированный Send • Комбинированный Send / Receive • Send по готовности ( "ready" Send ).
С любым типом операции Send может состоять в паре любой тип операции Receive.
Функции передачи данных типа "точка-точка" имеют список аргументов одного из следующих форматов:
• Блокирующий Send:
MPI_Send( buffer, count, type, dest, tag, comm ) • Неблокирующий Send:
MPI_Isend( buffer, count, type, dest, tag, comm, request ) • Блокирующий Receive:
MPI_Recv( buffer, count, type, source, tag, comm., status ) • Неблокирующий Receive:
MPI_Irecv( buffer, count, type, source, tag, comm., request ) Аргументы в этих функциях имеют следующее назначение:
1. buffer – место хранения данных, которые посылаются или принимаются;
2. count – количество элементов данных конкретного типа, которые посылаются или принимаются;
3. type – тип элементарных данных, задаваемый через встроенные MPI-типы, такие как (для языка С): MPI_CHAR, MPI_DOUBLE, MPI_BYTE, MPI_PACKED и др.
4. dest – указывает процесс, которому должно быть доставлено сообщение – задается через ранг принимающего процесса;
5. source – аргумент функций приема сообщений, указывающий MPI_ANY_SOURCE означает прием сообщения от любого 6. tag – произвольное неотрицательное целое число, присваиваемое программистом для однозначной идентификации сообщения; у парных операций Send и Reсeive эти числа должны совпадать; указание у операции Receive значения MPI_ANY_TAG может быть использовано для приема любого сообщения, независимо от значения tag ;
7. comm – указывает на коммуникатор, в рамках которого трактуются значения аргументов dest и source ; чаще всего используется встроенный коммуникатор MPI_COMM_WORLD ;
8. status – для операции Receive, указывает источник (source) сообщения и его тег ( tag ); в языке С этот аргумент есть указатель на встроенную структуру MPI_Status ; из этой же структуры может быть получено количество принятых байт посредством функции MPI_Get_count ;
9. request – используется в неблокирующих операциях Send и Receive, и задает уникальный "номер запроса"; в языке С, этот аргумент является указателем на встроенную структуру К наиболее часто используемым блокирующим функциям передачи сообщений относятся следующие функции:
MPI_Send Базовая блокирующая операция посылки сообщения. Заканчивает свою работу только тогда, когда программный буфер, из которого берутся данные для посылки, готов для повторного использования.
Формат вызова:
MPI_Send( &buf, count, datatype, dest, tag, comm. ) MPI_Recv Принимает сообщения и блокирует вызывающий эту функцию процесс до тех пор, пока в программном буфере не станут доступными принятые данные.
Формат вызова:
MPI_Recv( &buf, count, datatype, source, tag, comm, &status ) MPI_Ssend Синхронная блокирующая операция посылки сообщения: посылает сообщение и блокирует вызвавший эту функцию процесс, пока программный буфер не будет готов к повторному использованию и пока процесс-получатель не начал принимать посылаемые сообщения.
Формат вызова:
MPI_Ssend( &buf, count, datatype, dest, tag, comm ) MPI_Bsend, MPI_Buffer_attach Перед вызовом MPI_BSend программист должен вызвать функцию MPI_Buffer_attach для размещения буфера, используемого в MPI_Bsend. Буферированная блокирующая операция посылки сообщения заканчивает свою работу, когда данные из программного буфера скопированы в буфер посылки.
Форматы вызовов:
MPI_Buffer_attach( &buffer, size ) MPI_Bsend( &buf, count, datatype, dest, tag, comm ) В нижеследующем примере, процесс 0 посылает однобайтовое сообщение процессу 1, и ждет от него аналогичного сообщения.
Основные особенности и отличия радиовещательных (коллективных) обменов данными от обменов типа "точка-точка" состоят в следующем:
1. Принимают и/или передают данные одновременно все процессы группы для указываемого коммуникатора;
2. Радиовещательная (коллективная) функция выполняет одновременно и прием, и передачу данных, а потому она имеет параметры, часть из которых относится к приему, а часть – к передаче данных;
3. Как правило, значения всех параметров (за исключением адресов буферов) должны быть идентичны во всех процессах;
4. Коллективные операции являются блокирующими;
5. Коллективные операции могут использоваться только для встроенных (predefined) MPI-типов данных, но не могут использоваться для производных (derived) MPI-типов данных.
MPI_Bcast Посылает сообщение от процесса с рангом "root" (обычно, это процесс с рангом 0) всем другим процессам в группе.
Формат вызова:
MPI_Bcast( &buffer, count, datatype, root, comm ) MPI_Gather Собирает сообщения от каждого из процессов в группе в приемный буфер процесса с рангом 'root".
Формат вызова:
MPI_Gather( &sendbuf, sendcount, sendtype, &recvbuf, recvcount, recvtype, root, comm ) Cледует заметить, что • sendtype и recvtype, в общем случае, могут различаться, а потому будут задавать разную интерпретацию данных на приемной и передающей стороне;
• процесс root также отправляет данные, но в свой же приемный MPI_Scatter Эта функция является обратной к функции MPI_Gather: отдельные части передающего буфера процесса с рангом 'root& распределяются по приемным буферам всех других процессов в группе.
Формат вызова:
MPI_Scatter( &sendbuf, sendcount, sendtype, &recvbuf, recvcount, recvtype, root, comm ) MPI_Allgather Эта функция аналогична функции MPI_Gather, за исключением того, что прием данных осуществляет не один процесс, а все процессы: каждый процесс имеет специфическое содержимое в передающем буфере, но все процессы получают в итоге одинаковое содержимое в приемном буфере.
Формат вызова:
MPI_Allgather( &sendbuf, sendcount, sendtype, &recvbuf, recvcount, recvtype, comm ) MPI_Alltoall Каждый процесс отдельные части своего передающего буфера рассылает всем остальным процессам; каждый процесс получает эти части от всех остальных и размещает их по порядку рангов процессов, от которых они получены.
Формат вызова:
MPI_Alltoall ( &sendbuf, sendcount, sendtype, &recvbuf, recvcount, recvtype, comm ) В нижеследующем примере с помощью функции MPI_Scatter строки массива рассылаются отдельным процессам:
Вывод на консоль данной программы будет таким:
rank= 0 Results: 1.000000 2.000000 3.000000 4. rank= 1 Results: 5.000000 6.000000 7.000000 8. rank= 2 Results: 9.000000 10.000000 11.000000 12. rank= 3 Results: 13.000000 14.000000 15.000000 16. Коллективные операции и их исполнение Коллективные операции в MPI выполняют следующие функции:
• MPI_Reduce, • MPI_Allreduce, • MPI_Reduce_scatter и • MPI_Scan.
Помимо встроенных пользователь может определять и использовать свои собственные коллективные операции. Для этого служат функции MPI_Op_create и MPI_Op_free, а также специальный тип данных MPI_Usr_function.
Алгоритм исполнения всех коллективных функций одинаков: в каждом процессе имеется массив с данными и над элементами с одинаковым номеров в каждом из процессов производится одна и та же операция (сложение, произведение, вычисление максимума/минимума и т. п.). Встроенные коллективные функции отличаются друг от друга способом размещения результатов в процессах.
MPI_Reduce Данная функция выполняет коллективную операцию во всех процессах группы и помещает результат в процесс с рангом root.
Формат вызова:
MPI_Reduce( &sendbuf, &recvbuf, count, datatype, op, root, comm ) Пример поэлементного суммирования массивов:
Встроенных коллективных операций в MPI насчитывается 12:
MPI_MAX и MPI_MIN – поэлементные максимум и минимум;
MPI_SUM – сумма векторов;
MPI_PROD – произведение векторов;
MPI_LAND, MPI_BAND, MPI_LOR, MPI_BOR, MPI_LXOR, MPI_BXOR – логические и двоичные (бинарные) операции И, ИЛИ, исключающее ИЛИ;
• MPI_MAXLOC, MPI_MINLOC – поиск индекса процесса с максимумом/минимумом значения и самого этого значения.
Эти функции могут работать только со следующими типами данных (и только ними):
• MPI_MAX, MPI_MIN – целые и вещественные • MPI_SUM, MPI_PROD – целые, вещественные (комплексные – • MPI_LAND, MPI_LOR, MPI_LXOR – целые • MPI_BAND, MPI_BOR, MPI_BXOR – целые и типа • MPI_MAXLOC, MPI_MINLOC – вещественные MPI_Allreduce Применяет коллективную операцию и рассылает результат всем процессам в группе.
Формат вызова:
MPI_Allreduce (&sendbuf, &recvbuf, count, datatype, op, comm) MPI_Reduce_scatter Функция применяет вначале коллективную операцию к векторам всех процессов в группе, а затем результирующий вектор разбивается на непересекающиеся сегменты, которые распределяются по процессам. Данная операция эквивалентна вызову функции MPI_Reduce, за которым производится вызов MPI_Scatter.
Формат вызова:
MPI_Reduce_scatter (&sendbuf, &recvbuf, recvcount, datatype, op, comm) MPI_Scan Данная операция аналогична функции MPI_Allreduce в том отношении, что после ее выполнения каждый процесс получает результирующий массив. Главное отличие данной функции состоит в том, что содержимое результирующего массива в процессе i является результатом выполнения коллективной операции над массивами из процессов с номерами от 0 до i включительно.
Формат вызова:
MPI_Scan( &sendbuf, &recvbuf, count, datatype, op, comm ) Управление процессами в MPI происходит посредством организации их в группы, управляемые коммуникаторами.
Группа есть упорядоченное множество процессов. Каждому процессу в группе присваивается уникальный целочисленный номер – ранг. Значения ранга изменяются от 0 до N – 1, где N есть количество процессов в группе. В MPI группа представляется в памяти компьютера в виде объекта, доступ к которому программист осуществляет с помощью "обработчика" (handle) MPI_Group. С группой всегда связывается коммуникатор, также представляемый в виде объекта. Коммуникатор обеспечивает взаимодействие между процессами, относящимися к одной и той же группе. Поэтому во всех MPI-сообщениях одним из аргументов задается коммуникатор. Коммуникаторы как объекты также доступны программисту с помощью обработчиков. В частности, обработчик коммуникатора, который включает в себя все процессы задачи, называется MPI_COMM_WORLD.
Основные цели средств организации процессов в группы:
1. Позволяют организовывать задачи, объединяя в группы процессы, основываясь на их функциональном назначении;
2. Позволяют осуществлять коллективные операции (см. Раздел 4) только на заданном множестве процессов;
3. Предоставляют базис для организации пользователем виртуальных топологий;
4. Обеспечивают безопасную передачу сообщений в рамках одной группы.
Группы/коммуникаторы являются динамическими – они могут создаваться и уничтожаться во время исполнения программы.
Процессы могут относиться к более, чем одной группе/коммуникатору. В каждой группе/коммуникаторе каждый процесс имеет уникальный номер (ранг).
MPI обладает богатой библиотекой функций, относящихся к группам, коммуникаторам и виртуальным топологиям, типичный сценарий использования которых представлен ниже:
1. Получить обработчик глобальной группы, связанной с коммуникатором MPI_COMM_WORLD, используя функцию MPI_Comm_group.
2. Создать новую группу как подмножество глобальной группы, используя функцию MPI_Group_incl.
3. Создать новый коммуникатор для вновь созданной группы, используя функцию MPI_Comm_create.
4. Получить новый ранг процесса во вновь созданном коммуникаторе, используя функцию MPI_Comm_rank.
5. Выполнить обмен сообщениями между процессами в рамках вновь созданной группы.
6. По окончании работы освободить (уничтожить) группу и коммуникатор, используя функции MPI_Group_free и MPPI_Comm_free.
Пример, показанный ниже, демонстрирует создание двух отдельных групп процессов для выполнения коллективных операций внутри каждой из них.
Вывод программы на консоль будет таким:
rank= 7 newrank= 3 recvbuf= rank= 0 newrank= 0 recvbuf= rank= 1 newrank= 1 recvbuf= rank= 2 newrank= 2 recvbuf= rank= 6 newrank= 2 recvbuf= rank= 3 newrank= 3 recvbuf= rank= 4 newrank= 0 recvbuf= rank= 5 newrank= 1 recvbuf= Организация логических топологий процессов В терминах MPI виртуальная топология описывает отображение MPI процессов на некоторую геометрическую конфигурацию процессоров.
В MPI поддерживается два основных типа топологий – декартовые (решеточные) топологии и топологии в виде графа.
MPI-топологии являются виртуальными – связь между физической структурой параллельной машины и топологией MPI-процессов может и отсутствовать.
Виртуальные топологии строятся на основе групп и коммуникаторов, и "программируются" разработчиком параллельного приложения.
Смысл использования виртуальных топологий заключается в том, что они в некоторых случаях удобны для задач со специфической коммуникационной структурой. Например, декартова топология удобна для задач, в которых обрабатывающие элементы в процессе вычислений обмениваются данными только со своими 4-мя непосредственными соседями. В конкретных реализациях возможна оптимизация отображения MPI-процессов на физическую структуру заданной параллельной машины.
В примере, показанном ниже, создается декартова топология 4 х из 16 процессов, и каждый процесс сообщает свой ранг своим соседям, получая от них их собственные ранги.
Вывод данной программы на консоль будет следующим:
rank= 0 coords= 0 0 neighbors(u,d,l,r)= -3 4 - rank= 0 inbuf(u,d,l,r)= -3 4 - rank= 1 coords= 0 1 neighbors(u,d,l,r)= -3 5 rank= 1 inbuf(u,d,l,r)= -3 5 rank= 2 coords= 0 2 neighbors(u,d,l,r)= -3 6 rank= 2 inbuf(u,d,l,r)= -3 6 rank= 14 coords= 3 2 neighbors(u,d,l,r)= 10 -3 rank= 14 inbuf(u,d,l,r)= 10 -3 rank= 15 coords= 3 3 neighbors(u,d,l,r)= 11 -3 14 - rank= 15 inbuf(u,d,l,r)= 11 -3 14 - Отладка параллельных программ с использованием VisualStudio 2005 включает в себя важные функции, которые позволяют отлаживать параллельные приложения в удаленном режиме.
MPI-отладчик из VisualStudio использует файл Mpishim.exe для автоматического присоединения отладочных средств к MPIпроцессам, исполняющимся на узлах кластера. Совокупность стандартных средств отладки, уже имевшееся в составе VisualStudio 2005, расширено на параллельные приложения, и обеспечивает точки останова и пошаговое выполнение на уровне процессов и на уровне потоков. С помощью этих средств, возможно отладить приложения, в которых имеются несоответствия в передаче и приеме сообщений, дедлоки и условия для возникновения гонок.
Установка и конфигурирование средств отладки VisualStudio 2005 ProfessionalEdition и VisualStudio TeamSystem позволяют отлаживать приложения, включая и параллельные приложения, в удаленном режиме. При отладке MPIприложений в рамках VisualStudio используются следующие средства:
1. Msvsmon – монитор удаленной отладки 2. Smpd – процесс-демон, который запускает приложение 3. Mpishim – приложение, которое связывается с Msvsmon и запускает процедуру Mpiexeс.
4. Mpiexec – процедура запуска приложения пользователя в виде MPI-задания.
Общие шаги по установке и конфигурированию средств отладки MPI-приложений в рамках VisualStudio состоят в следующем:
1. Установить и сконфигурировать MS MPI на каждом узле кластера. MS MPI включен в пакет WindowsComputeClusterServer 2003, но поддерживаются и другие версии MPI.
2. Установить Mpishim.exe на каждом узле кластера в одной и той же директории на каждом из узлов. Например, можно поместить Mpishim.exe в директорию C:\Windows\system32 на каждом узле кластера.
3. Установить монитор удаленной отладки (Msvsmon.exe) на каждом узле кластера.
4. Установить на компьютере, с которого будет производиться удаленная отладка, достаточные привилегии для запуска заданий на кластере. Этот компьютер должен находиться в таком сегменте сети и в такой подсети, чтобы с него был возможен доступ к вычислительным узлам кластера.
Чтобы установить все требуемые компоненты для удаленной отладки, на каждом вычислительном узле необходимо выполнить следующие действия:
1. Вставить в дисковод последний из установочных дисков VisualStudio 2005.
2. Отыскать на нем директорию RemoteDebugger\x64.
3. Запустить из нее файл rdbgsetup.exe для установки компонент для удаленной отладки.
1. При большом количестве узлов на вычислительном кластере, RemoteDebugger\x64 на диск, доступный всем узлам, и запускать процедуру установки оттуда.
2. Пользователь, задействованный в сессии отладки MPIприложений в VisualStudio 2005, должен также быть пользователем, запустившим Msvsmon.exe на удаленных машинах, поскольку VisualStudio проверяет, чтобы пользователь, выполняющий отладку, и пользователь, запустивший процессы на удаленных компьютерах, совпадали.
VisualStudio 2005 имеет средства, которые делают ее эффективным инструментом отладки MPI-приложений. Пользователь может выполнять MPI-приложения непосредственно в рамках сессии из VisualStudio в двух режимах:
• (1) в режиме симуляции на одной машине (задавая количество виртуальных процессоров, которые будет использовать MPIприложение), • (2) в режиме непосредственного запуска приложения на вычислительном кластере.
При задании точек остановки (breakpoints) в приложении пользователь может указать применение этих точек:
• (а) ко всем MPI-процессам, или;
• (б) только к некоторым из них путем задания условий фильтрации для точек остановки.
Установка конфигурационных параметров VisualStudio Чтобы установить конфигурационные параметры для MPIприложения, для которого будет производиться отладка, необходимо выполнить следующие шаги:
1. Открыть в VisualStudio решение, которое содержит требуемое MPI приложение.
2. На странице Properties проекта раскрыть подраздел ConfigurationProperties, выбрать Debugging и затем в списке Debuggertolaunch, выбрать MPI ClusterDebugger.
Рис. 1. Отладка MPI-приложения с использованием VisualStudio.
3. Заполнить соответствующими аргументами поля, как показано на рис 1. Те же самые аргументы используются и в обычном MPI-задании, за исключением файла Mpishim.exe, который необходим для взаимодействия отладчика с MPI-сервисом.
4. Проверить, что значение поля ApplicationCommand содержит значение, которое верно для каждого из узлов кластера. Легче всего это обеспечить, если указанный путь относится к общей директории для всех узлов.
5. В главном меню VisualStudio 2005 выберите пункт Tools, а в нем – подпункт Options для раскрытия диалогового окна, показанного на рис 2.
6. Установить необходимые точки остановки и заново запустить процесс Build повторного построения изображения.
Важное свойство отладки параллельных приложений в VisualStudio 2005 состоит в том, что в ней возможно устанавливать точки остановки отдельно для каждого процесса. Например, можно установить точку остановки только для процесса с конкретным WindowsProcess ID (PID) или же для множества процессов с выбранными PID.
1 Написать программу, определяющую оптимальную стратегию распараллеливания решения пакета, состоящего из N зависимых задач, в кластере, состоящем из P узлов. Цель оптимизации – минимизация стоимости решения пакета задач.
2 Написать программу, определяющую оптимальную стратегию распараллеливания решения пакета, состоящего из N зависимых задач, в кластере, состоящем из P узлов. Цель оптимизации – минимизация времени решения пакета задач.
3 Написать программу, определяющую оптимальную стратегию распараллеливания решения пакета, состоящего из N независимых задач, в кластере, состоящем из P-узлов. Цель оптимизации – минимизация стоимости решения пакета задач.
4 Написать программу, определяющую оптимальную стратегию распараллеливания решения пакета, состоящего из N независимых задач, в кластере, состоящем из P-узлов. Цель оптимизации – минимизация стоимости решения пакета задач.
5 Написать программу, определяющую оптимальную стратегию распараллеливания решения пакета, состоящего из N независимых задач, в кластере, состоящем из P-узлов. Цель оптимизации – минимизация времени решения пакета задач.
6 Написать программу, определяющую оптимальную стратегию распараллеливания решения пакета, состоящего из N независимых задач, в кластере, состоящем из P-узлов. Цель оптимизации – минимизация времени решения пакета задач.
7 Написать программу сложения матриц W-ветвями.
8 Написать программу умножения матриц W-ветвями.
9 Написать программу вычисления определителя N-го порядка W-ветвями.
10 Написать программу поиска экстремума функции F(x1, x2, x3) W-ветвями методом прямого поиска.
11 Написать программу поиска экстремума функции F(x1, x2, x3) W-ветвями методом Монте-Карло.
12 Написать программу вычисления определенного интеграла функции F(x1, x2, x3) W-ветвями.
13 Написать программу поиска экстремума функции F(x1, x2, x3) W ветвями методом Монте-Карло.
14 Написать программу поиска экстремума функции F(x1, x2, x3) W ветвями методом спуска по градиенту.
15 Написать программу поиска простых контуров на взвешенном орграфе W-ветвями.
16 Написать программу поиска кратчайшего пути для каждой пары вершин на взвешенном орграфе W-ветвями.
17 Написать программу поиска кратчайшего пути для каждой пары вершин на взвешенном графе W-ветвями.
18 Написать программу сортировки массива W-ветвями.
Содержание отчета по курсовой работе 1. Титульный лист 2. Задание курсовой работы 3. Блок-схема программы 4. Текст программы Приложение А Образец оформления титульного листа курсовой работы
МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РФ
ФГБОУ ВПО «СЕВЕРО-КАВКАЗСКИЙ ГОРНО-МЕТАЛЛУРГИЧЕСКИЙ
(ГОСУДАРСТВЕННЫЙ ТЕХНОЛОГИЧЕСКИЙ УНИВЕРСИТЕТ)
Кафедра автоматизированной обработки информацииКУРСОВАЯ РАБОТА
по дисциплине: «Параллельная обработка данных»
ЛИТЕРАТУРА
1. Воеводин В. В., Воеводин Вл. В. Параллельные вычисления.СПб.: БХВ-Петербург, 2002. 608 с.
2. Антонов А. С. Параллельное программирование с использованием технологии MPI: Учебное пособие. М.: Изд-во МГУ, 2004.
71 с.
3. Корнеев В. Д. Параллельное программирование в MPI. МоскваИжевск: Институт компьютерных исследований, 2003.
4. Баканов В. М., Осипов Д. В. Введение в практику разработки параллельных программ в стандарте MPI: Учебно-методическое пособие по выполнению лабораторных работ. М.: МГАПИ, 2005.
63 c.: ил.
5. Портал «Параллельные вычисления» http://www.parallels.ru.
6. Федеральный портал «Российское образование»
http://www.edu.ru/ 7. Федеральное хранилище «Единая коллекция цифровых образовательных ресурсов» http://school-collection.edu.ru/