Будь умным!


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

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

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


Лабораторна робота №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. Курсовая работа- Техника обнаружения базовых гематологических симптомов и интерпретация общего анализа крови
2. Статья Правовое регулирование трудовых отношений с иностранным элементом
3. технологический процесс предприятия [2
4. Н~Р ОТАН ПАРТИЯСЫНЫ~ ХХІ ~АСЫРДА~Ы МИССИЯСЫН~р Отан ~ халы~ты~ партия
5. Fif 14 Кукмор является открытым некоммерческим проектом.
6. Специализация инструментального оборудования Цехи предприятия могут быть организованы по технологическ
7. Христианство на Западе в XVII’XVIII вв
8. ldquo;Gesmmelte ufsetze zur Religionssoziologie
9. лет. Вожатый должен знать множество игр для этого возраста как подвижных так и развивающих
10. Лабораторная работа 9 ИССЛЕДОВАНИЕ ПОПЕРЕЧНЫХ КОЛЕБАНИЙ СТРУНЫ ЦЕЛЬ РАБОТЫ Изучение волн
11. История открытий в области строения атомного ядра
12. реферату- Сутність та особливості міжнародної економічної діяльностіРозділ- Економічні теми Сутність та о
13. Обломов- Автор подробно описывает кабинет Обломова
14. ЛАБОРАТОРНА РОБОТА 23 Створення персонального вебсайту I
15. экономической статистики и исследует вопросы финансов на всех уровнях управления.
16. Тема 4.6. Комбікормові заводи і цехи 6
17. Конституция Российской Федерации 1993 г
18. Грачи прилетели- деревья и поля еще голые както особенно бросаются в глаза старые церковь и колоколенка л
19. I. Внеоборотные активы Активный Основные средства 01 По в.
20. ЧЧЧ далее ~ предприятие