Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
MPI - MKM.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
391.79 Кб
Скачать

3 . 2*Cos(X) функциясының интегралын [0,1] аймақта параллельді есептеңіз.

double f(double x)

{return 2*cos(x);}

int main(intargc,char **argv)

{

intsize,rank;

MPI_Status status;

MPI_Init(&argc,&argv);

MPI_Comm_rank(MPI_COMM_WORLD,&rank);

MPI_Comm_size(MPI_COMM_WORLD,&size);

float h=0.05,a=0,b=1,s=0.0;

for(inti=rank; a+h*(i+1)<b+h; i+=size)

{ s+=h*f(a+h*(i+1)); }

if(rank!=0)

{ MPI_Send(&s,1,MPI_FLOAT,0,1,MPI_COMM_WORLD);

}

if(rank==0)

{ float r;

MPI_Recv(&r,1,MPI_FLOAT,1,1,MPI_COMM_WORLD,&status);

s+=r;

printf("s=%f\n ",s);

}

}

75 Сурак

1.Амдал заны. Үдеу. Тиімділік.

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

С помощью информационного графа можно оценить максимальное ускорение, которого можно достичь при распараллеливании алгоритма там, где это возможно. Предположим, что программа выполняется на машине, архитектура которой идеально соответствует структуре информационного графа программы. Пусть время выполнения алгоритма на последовательной машине Т1, причем Тs — время выполнения последовательной части алгоритма, а Тр — параллельной. Очевидно:T1 = TS + Тр.

При выполнении той же программы на идеальной параллельной машине, N независимых ветвей параллельной части распределяются по одной на V процессоров, поэтому время выполнения этой части уменьшается до величины Тр / N, а полное время выполнения программы составит:T2=TS+ Tp/N.

Коэффициент ускорения, показывающий, во сколько раз быстрее программа выполняется на параллельной машине, чем на последовательной, определяется формулой:Х= Т}2 = (Ts + Tp) / (Ts + Tp/N) = 1/(S + P/N),

где S= Ts / (Ts + Tp) и P= Tp / (Ts + Tp) — относительные доли последовательной и параллельной частей (S+ Р= 1). График зависимости коэффициента ускорения от числа процессоров и степени параллелизма алгоритма (относительной доли параллельной части) приведен на рис. 2.5. Эта зависимость носит название закона Амдала.

Из рисунка видно, что для программ (алгоритмов) с небольшой степенью параллелизма использование большого числа процессоров не дает сколько-нибудь значительного выигрыша в быстродействии. Если же степень параллелизма достаточно велика, коэффициент ускорения может быть большим. Начиная с некоторого значения, увеличение числа процессоров дает только небольшой прирост производительности.

2.Mpi мәлімет типтері. Олар не үшін керек ? Қолдану мысалдары.

MPI-константы, шаблоны и прототипы находятся в MPI-заголовочном файле mpi.h, который должен стандартным для C образом #include<mpi.h> присоединяться к программе пользователя.

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

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

MPI_CHAR-знаковое символьное

MPI_SHORT-знаковое коротк целое

MPI_INT-знаковое целое

MPI_LONG-знаковое длин целое

MPI_UNSIGNED_CHAR-беззнак символьное

MPI_UNSIGNED_SHORT-беззнаккоротк целое

MPI_UNSIGNED-беззнак целое

MPI_UNSIGNED_LONG-беззнак длинное целое

MPI_FLOAT-число с плав точкой

MPI_DOUBLE-число двойной точн

MPI_LONG_DOUBLE-число четырехкрточн

MPI_BYTE=битовые данные

Производные типы данных или пользовательские получаются из базовых типов. MPI представляет несколько способов создания типов данных без явного конструирования карты типа:

· Непрерывный: это простейший способ конструирования нового типа. Он производит новый тип данных из count копий существующего со смещениями, увеличивающимися на протяженность oldtype (исходного типа). Простейший пример - массив элементов какого-то уже определенного типа;

· Векторный: это несколько обобщенный непрерывный тип, который допускает регулярные пробелы в смещениях. Элементы отделяются промежутками кратными протяженности исходного типа данных. Пример - столбцы матрицы, при определении матрицы как двумерного массива;

· H-векторный: похож на векторный, но расстояние между элементами задается в байтах;

· Индексный: при создании этого типа используется массив смещений исходного типа данных;

смещения измеряются в терминах протяженности исходного типа данных;

· H-индексный: похож на индексный, но смещения задаются в байтах;

· Структурный: обеспечивает самое общее описание. Фактически, если исходные аргументы состоят из базовых типов MPI, задаваемая структура есть в точности карта создаваемого типа.

Рассмотрим более подробно создание непрерывного типа данных. Непрерывный тип создается с использованием функции MPI_Type_contiguous, производящей новый тип данных, делая count копий исходного типа со смещениями, увеличивающимися на протяженность oldtype. Например, если исходный тип данных (oldtype) имеет карту типа {(int,0),(double,8)}, то MPI_Type_contiguous( 2, oldtype, &newtype); произведет тип данных newtype с картой типа {(int,0),(double,8),(int,16),(double,24)}.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]