Лабораторная работа №1 по дисциплине "Параллельное программирование"

Автор работы: Пользователь скрыл имя, 13 Декабря 2013 в 13:33, лабораторная работа

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

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

Прикрепленные файлы: 1 файл

Отчет по лабам по Параллельному программировнию.doc

— 819.00 Кб (Скачать документ)

Федеральное агентство  по образованию

Московский государственный  открытый университет

Чебоксарский политехнический  институт

 

 

Кафедра

Информационных технологий и программирования

 

 

 

                                специальность         230105    ___

 (шифр специальности)

 

 

 

 

 

 

 

 

 

Лабораторная работа №1

по дисциплине: параллельное программирование

 

 

 

 

 

 

 

Дата проверки      Выполнили студенты                 

                                                                                   Дьяконов В.Н.

Сорокин Д.В.                        

Результат проверки     Учебный шифр

609264

609244

Курс 4

 

Проверил       Малов А.А.

 

Замечания

 

 

 

Чебоксары, 2012 г.

 

 

 

 

Лабораторная работа №1

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

Выполнение работы:

Листинг программы:

#include "mpi.h"

#include <stdio.h>

#include <math.h>

double f(double);

double f(double a)

{

return(4.0/(1.0+a*a));

}

int main(int argc, char *argv[])

{

int n,myid, numprocs, i;

double PI25DT=3.141592653589793238462643;

double mypi,pi,h,sum,x;

double startwtime=0.0,

endwtime;

int namelen;

char processor_name[MPI_MAX_PROCESSOR_NAME];

MPI_Init(&argc, &argv);

MPI_Comm_size(MPI_COMM_WORLD,&numprocs);

MPI_Comm_rank(MPI_COMM_WORLD,&myid);

MPI_Get_processor_name(processor_name, &namelen);

fprintf(stdout, "Process %d of %d is on %s\n",

myid, numprocs, processor_name);

fflush(stdout);

n=10000;

if(myid==0)

startwtime=MPI_Wtime();

MPI_Bcast(&n, 1,MPI_INT,0,MPI_COMM_WORLD);

h=1.0/(double) n;

sum=0.0;

for (i=myid+1; i<=n;i+=numprocs)

{

x=h*((double)i-0.5);

sum+=f(x);

}

mypi=h*sum;

MPI_Reduce(&mypi,&pi,1,MPI_DOUBLE, MPI_SUM,0,MPI_COMM_WORLD);

if (myid==0)

{

endwtime=MPI_Wtime();

printf("pi is approximately %.16f, error is %.16f\n",

pi, fabs(pi-PI25DT));

printf("wall clock time=%f\n",

endwtime-startwtime);

}

MPI_Finalize();

return 0;

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Результат программы:


 

 

 

Контрольные вопросы:

 

1. Чем отличаются архитектуры  MPP и SMP? Каковы их преимущества и не 
достатки? Что такое NUMA-архитектура и каковы ее достоинства и недостатки?

SMP (symmetric multiprocessing) – симметричная  многопроцессорная архитектура.  Главной особенностью систем  с архитектурой SMP является наличие  общей физической памяти, разделяемой всеми процессорами.

MPP (massive parallel processing) – массивно-параллельная архитектура. Главная особенность такой архитектуры состоит в том, что память физически разделена.

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

Таблица 1

 

Общая память

Использование

памяти

Стоимостные характеристики

Масштабируемость

MPP

-

-

-

+

SMP

+

+

+

-


Отсутствие общей памяти в MPP архитектуре  значительно снижает скорость межпроцессорного обмена, в отличие от SMP архитектуры, в которой общая память присутствует.

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

Вследствие недостатков MPP архитектура  трудно реализуема, что приводит к значительным затратам, реализация SMP архитектуры, напротив, больших затрат не требует.

Главным преимуществом систем с  раздельной памятью является хорошая  масштабируемость: в отличие от SMP-систем, в машинах с раздельной памятью  каждый процессор имеет доступ только к своей локальной памяти, в связи с чем не возникает необходимости в потактовой синхронизации процессоров.

Основным параметром классификации  параллельных компьютеров является наличие общей (SMP) или распределенной памяти (MPP). Нечто среднее между SMP и MPP представляют собой NUMA-архитектуры, где память физически распределена, но логически общедоступна. Кластерные системы являются более дешевым вариантом MPP. При поддержке команд обработки векторных данных говорят о векторно-конвейерных процессорах, которые, в свою очередь могут объединяться в PVP-системы с использованием общей или распределенной памяти. Все большую популярность приобретают идеи комбинирования различных архитектур в одной системе и построения неоднородных систем.

 

 

 

 

 

2. Какие категории  задач пользователей известны? Что  такое “режим планирования” очередей?

Все задачи пользователей делятся на три категории – отладочные, пакетные и фоновые.

Отладочные задачи – это короткие по времени задачи, которые  запускаются исключительно в целях отладки. 

Пакетные задачи – это средние по времени задачи, которые производят  реальные расчеты и выполняются, не прерываясь.

Фоновые задачи – задачи с большим временем счета, которые могут  прерываться системой. Для фоновой задачи пользователь должен явно указать  квант – минимальное время счета фоновой задачи, в течение которого задачу  прерывать нельзя. 

Планирование очередей в каждый момент времени производится в соответствии с параметрами текущего режима планирования. Режим  планирования определяется следующими параметрами:

- дата и время включения режима;

- максимальное время, отведенное для отладочных задач;

- максимальное время, отведенное  для пакетных задач;

- число процессоров, которые  «резервируются» для отладочных  задач;

- шкала приоритетов пользователей. 

 

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

При истечении заказанного времени  счета sleeper завершается (в случае завершения задачи ‘естественным’ путем менеджер завершает sleeper и выполняет вышеперечисленные  действия). В случае истечения заданного  времени выполнения задания менеджер, получив сигнал о завершении sleeper, завершает процесс и также выполняет перечисленные действия.

Запуск на исполнение MPI-программы  производится с помощью команды:

 mpirun [параметры_mpirun...] <имя_программы> [параметры_программы...] [-host <host>]

-maxtime <максимальное_время> - максимальное время счета. От этого времени зависит положение задачи в очереди. После истечения этого времени задача принудительно заканчивается;

 

4. Что такое  “сетевой интерфейс”? Какие параметры  определяют его?

В компьютерных сетях сетевым интерфейсом называют:

- точку соединения между компьютером пользователя и частной или общественной сетью;

- сетевую карту компьютера (наиболее частое использование термина);

- точку соединения двух сетей  между собой. 

 

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

Параметры определяющие сетевой  интерфейс:

- используемая технология  среды передачи данных;

- скорость передачи;

- среда передачи;

- протокол соединения.

 

5. Какие сети  необходимы при создании вычислительного  кластера? Какие из 
них могут являться виртуальными? Какие из них критичны для времени 
выполнения параллельных программ?

Важно отметить наличие двух (логически разделенных) компьютерных сетей – сеть управления (служит для управления ВУ со стороны управляющей ЭВМ посредством инструкций типа rsh, данная сеть особенно нагружена в период старта и окончания задания) и сеть обмена данными (она же коммуникационная, служит для обмена данными между ВУ посредством MPI, нагружена  в  период  выполнения  задания).  Для  реализации  особо  мощных МВС применяют третью сеть для поддержки NFS (Network File System); при двух сетях NFS обычно использует сеть управления.

На рисунке 1 показана схема сети простого вычислительного кластера. В такой топологии Ethernet-соединения используются для административных целей, а соединения типа InfiniBand предназначены  для вычислительного трафика. Если у вас нет оборудования InfiniBand, то просто проигнорируйте нижнюю часть схемы. Все-таки Ethernet-кабель может нести как административную, так и вычислительную нагрузку.

 
Рисунок 1. Топология сети вычислительного  кластера

Данные Linux-кластеры могут быть реализованы  на основе сети Windows-ПЭВМ, которые критичны для времени выполнения параллельных программ.

Под виртуализацией сети понимается использование единой физической сети.

6. В чем  отличия администрирования вычислительного  кластера от такового 
обычной последовательной ЭВМ?

Основное отличие администрирования вычислительного кластера от  
обычной последовательной ЭВМ в отсутствие возможности стандартных способов  администрирования: клавиатура, мышь и т.д.

 

 

 

Федеральное агентство  по образованию

Московский государственный  открытый университет

Чебоксарский политехнический  институт

 

 

Кафедра

Информационных технологий и программирования

 

 

 

                                специальность         230105    ___

 (шифр специальности)

 

 

 

 

 

 

 

 

 

Лабораторная работа №2

по дисциплине: параллельное программирование

 

 

 

 

 

 

Дата проверки      Выполнили студенты                 

                                                                                   Дьяконов В.Н.

Сорокин Д.В.                        

Результат проверки     Учебный шифр

609264                       609244

Курс 4

 

Проверил       Малов А.А.

 

Замечания

 

 

 

Чебоксары, 2012 г.

 

 

 

Лабораторная  работа №2

 

Цель работы:  приобретение практических знаний и навыков в компиляции  и  запуске  простейших MPI-программ,  доказательство  необходимости  синхронизации ветвей параллельной программы.

Выполнение  работы: 

Листинг программы  1 части:

// source code of EXAMP_01.C program

#include "mpi.h"

#include <stdio.h>

#include <sys/timeb.h>

 // for ftime function

int main(int argc, char **argv)

{

int CURR_PROC, ALL_PROC, NAME_LEN;

char PROC_NAME[MPI_MAX_PROCESSOR_NAME];struct timeb t;

// time contain structure

MPI_Init (&argc, &argv);

MPI_Comm_rank (MPI_COMM_WORLD, &CURR_PROC); /* current process */

MPI_Comm_size (MPI_COMM_WORLD, &ALL_PROC); /* all process */

// get processor name (really computer name)

MPI_Get_processor_name(PROC_NAME, &NAME_LEN);ftime(&t);

// get current time point

// t.time is time in sec since January 1,1970

// t.millitm is part of time in msec

// ATTENSION ! ftime may by used only after synchronization all processors time

// output to STDIN

printf("I am process %d from %d and my name is %s (time: %.3f sec)\r\n",CURR_PROC, ALL_PROC, PROC_NAME, (t.time+1e-3*t.millitm));

MPI_Finalize();

return 0;

}

 // end of EXAMPLE_01 program

 

 

 

 

 

Результат проргаммы:

 

 

Листинг программы  2 части:

// source code of EXAMP_02.C program

#include "mpi.h"

#include <stdio.h>

#include <string.h>

int main (int argc, char **argv)

{

char message[20];

int i=0, all_rank, my_rank;

MPI_Status status;

MPI_Init (&argc, &argv);

MPI_Comm_rank (MPI_COMM_WORLD, &my_rank); // get number current process

MPI_Comm_size (MPI_COMM_WORLD, &all_rank);

// all process

if (my_rank==0) /* code for process zero */

{

strcpy (message, "Hello, there!\0");

for(i=1; i<all_rank; i++)

MPI_Send(message, strlen(message), MPI_CHAR, i, 999, MPI_COMM_WORLD);

}

else /* code for other processes */

{

//MPI_Recv(message, 20, MPI_CHAR, 0, 999, MPI_COMM_WORLD, &status);

MPI_Recv(message, 20, MPI_CHAR, MPI_ANY_SOURCE, MPI_ANY_TAG, MPI_COMM_WORLD,&status);

printf ("I am %d process; received: %s\n", my_rank, message);

}

 

MPI_Finalize();

return 0;

}

 // end of EXAMP_02 program

 

Результат программы:

 

 

 

Контрольные вопросы:

1.  Из каких стадий состоит жизненный цикл процессов при параллельном программировании?


 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2. Почему нельзя точно  определить момент старта процессов  на вычислительных узлах?

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

3. Что такое  коммуникатор? Что такое пользовательские топологии и какие (кроме стандартной с линейной нумерацией) определены MPI?

В MPI продумано объединение  ветвей в коллективы (это помогает надежнее отличать сообщения друг от друга). Достигается это введением в функции MPI параметра типа ‘коммуникатор’, который можно рассматривать как дескриптор (номер) коллектива (он ограничивает область действия данной функции соответствующим коллективом). Коммуникатор коллектива, который включает в себя все ветви приложения, создается автоматически (при выполнении функции MPI_INIT) и называется MPI_COMM_WORLD; в дальнейшем имеется возможность (функция MPI_Comm_split) создавать новые коммуникаторы. Имеют место включающий только самого себя как процесс коммуникатор MPI_COMM_SELF и (заведомо неверный) коммуникатор MPI_COMM_NULL; в случае возможности (динамического) порождения новых процессов ситуация сложнее.

Информация о работе Лабораторная работа №1 по дисциплине "Параллельное программирование"