У вас вопросы?
У нас ответы:) SamZan.net

Тема- MPIпрограма обчислення визначеного iнтеграла

Работа добавлена на сайт samzan.net: 2015-07-10

Поможем написать учебную работу

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

Предоплата всего

от 25%

Подписываем

договор

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

Скидка 25% при заказе до 3.2.2025

Лабораторна робота №7

Тема: MPI-програма обчислення визначеного iнтеграла.

Мета роботи: розробити за допомогою MPI програму для обчислення визначеного iнтеграла на многопроцессорной системi.

Теоретичнi вiдомостi

Виконаємо розробку MPI-версiї розглянутої ранiше програми обчислення визначеного iнтегралу. Задача полягає в розподiлi обчислення IN на необхiднiй кiлькостi процесорiв. Нехай ми маємо необмежене число процесорiв, тодi розiб’ємо вихiдну задачу на елементарнi:

Ij = f(xj + 0.5h)h,  j=1,N (7.1)

i назначимо j-ту задачу на один процесор, всього буде задiяно N процесорiв. Обчислення можна вести в наступний спосiб:

  1.  Процесор P0 запитує у користувача кiлькiсть iнтервалiв N.
  2.  Процесор P0 передає N рештi процесiв P1 . . .PN-1.
  3.  Процесори P1 . ..PN-1 приймають вiд P0 значення N.
  4.  Процесори P0...PN-1 обчислюють значення h та Ij, j = 1,N-1 за формулою 7.1.
  5.  Процесори P1 . ..PN-1 передають P0 значення Ij, j = 1,N - 1.
  6.  Процесор P0 приймає значення Ij вiд процесорів P1...PN-1 i обчислює суму IN.

Однак, так як кiлькiсть процесорiв обмежена, то кожен процесор буде обчислювати часткову суму за допомогою наступного фрагменту:

for(j  = k;   j  < N; j +=M)
{

Ik = Ik+  f (xj +0.5h)h
}

де k - номер процесору, M - кiлькiсть процесорiв, N - кiлькiсть iнтервалiв.

Лiстiнг 7.1. MPI-програма обчислення iнтеграла

#include <stdio . h>

#include <string . h>

#include <mpi .h>

#define  MSG_ID1 98

#define  MSG_ID2 99

int   main( int   argc ,   char  ∗∗argv )

{

int  me,   size ;

unsigned   intervals ;

int   i,   j;

double  h,   Ik,   x;

MPI_Status   status ;

MPI_Init  (&argc ,  &argv ) ;

MPI_Comm_rank  (MPI_COMM_WORLD,  &me) ;

MPI_Comm_size  (MPI_COMM_WORLD,  &size ) ;

/  Головний  процес  запитує у користувача

      кiлькiсть   iнтервалiв  /

 if   (me == 0)

{        printf ("Enter   intervals :");

scanf ( "%u" , &intervals ) ;

       }   /   if   (me == 0)  /

/  Головний  процес  розсилає допомiжним  кiлькiсть   iнтервалiв  /

if (me == 0)

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

MPI_Send (&intervals ,1 ,MPI_UNSIGNED,   i ,  MSG_ID1, MPI_COMM_WORLD) ;

else

{       /  Допомiжнi процеси отримують от

 головного  кiлькiсть  iнтервалiв  /

 MPI_Recv(&intervals ,   1, MPI_UNSIGNED,   0, MSG_ID1, MPI_COMM_WORLD,  &status ) ;

}   /   else   if(me == 0)  /

/  Пiдрахунок суми  свого  iнтервалу  /

 h = 1.0/intervals;     Ik = 0;

for (j  = me;   j  <  intervals;   j += size)

{       x= (j  + 0.5)     h;

Ik += 4/(1 + x    x);

}   /   for(j=me;j<intervals ; j += size)/

 Ik  = h;

MPI_Barrier(MPI_COMM_WORLD) ;

if (  me== 0)

{       /  Головний  процес  збирає  вiд

 допомiжних значення  їх  сум  /

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

      {

MPI_Recv(&x,   1, MPI_DOUBLE,   i ,  MSG_ID2,MPI_COMM_WORLD

,& status ) ;

Ik += x;

}  /   for(i = 1;   i  <  size;   i++) /

 printf ( " value = %.10 l f \n" ,   Ik ) ;

}   /   if( me == 0)  /

 else 

{       /  Допомiжнi процеси  вiдсилають

 головному  значення  своїх  сум    /

MPI_Send (&Ik , 1, MPI_DOUBLE,   0,MSG_ID2,MPI_COMM_WORLD) ; }   /   else   if( me == 0)  /

 MPI_Finalize () ;

return   0;

}

У данiй програмi використовується функцiя MPI_Barrier. Ця функцiя блокує роботу процесiв, що викликали дану процедуру, доти, поки всi процеси зазначеної групи, що залишилися, також не виконають цю функцiю.

Завдання

  1.  Виконати програму з лiстiнгу 7.1.
  2.  Розробити програму для обчислення визначеного iнтегралу на iнтервалi [0; 1]. Підiнтегральна функцiя та необхiдна кiлькiсть процесiв програми наведенi в таблиці.

Підiнтегральнi функцiї

№ варiанту

Функцiя

Кiлькiсть процесiв

1

2

3

1

f(x) = 5 (x + 1)

8

2

f(x) = 1/(x + 1)

4

3

f(x) = x2/4

5

4

f(x) = 3 x/(x + 1)

3

5

f(x) = 7/(x3 + 1)

8

6

f(x) = sin(x + 1)

7

7

f(x) = cos(1/(x + 2))

2

8

f(x) = x3/(x2 + 1)

6

9

f(x) = sin(x)/(x + 1)

5

10

f(x) = x/(cos(x2) + 1)

8

11

f(x) = (x + 1)/(x + 2)

4

12

f(x) = sin(x)/(x2 + 5)

9

13

f(x) = x + cos(x)

7

14

f(x) = tg(x)

8

15

f(x) = sin(x) + cos(x)

3

16

f(x) = sin(x) tg(x)

4

 

Контрольнi питання

  1.  Яким чином обмiнюються iнформацiєю процеси в паралельному додатку?
  2.  Якi функцiї виконують iнiцiалiзацiю бiблiотеки MPI? її закриття? одержання інформацiї про паралельну програму?
  3.  Якi функцiї використовуються для передачi повiдомлень мiж процесами?
  4.  Яка функцiя блокує процеси?




1. .1 Термодинамика электродных процессов 5 1
2. тематика Раздел- Теория вероятностей математическая статистика и случайные процессы Выпуск 8
3. ПРЕДОСТАВЛЯТЬ ПОКУПАТЕЛЮ КАЧЕСТВЕННЫЙ ТОВАР Для предоставления покупателю качественного товара прод
4. промышленном комплексе но со временем область их применения постепенно расширялась и теперь в каждом треть
5. К вопросу о современной концепции социальной инфраструктуры города
6. Гравитация с точки зрения общей теории поля
7. Водовзводная Свиблова башня Московского Кремля
8. марлеві подушечки розміром 17х32см
9. 11 Поиск в массивах данных 1 Цель занятия изучить методику поиска элементов в массивах данных структурирова
10. 3565 г сахара200 мл молока1 длинная палочка корицы сломанная на 3 части10 г желатина4 больших яичных желтк Желат