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

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

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

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

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

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

от 25%

Подписываем

договор

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

Скидка 25% при заказе до 6.3.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
2. 2
3. Выселение из общежитий принадлежащих на праве частной собственности
4. реферат дисертації на здобуття наукового ступеня кандидата біологічних наук4
5. Архитектурное материаловедение.html
6. РЕФЕРАТ дисертації на здобуття наукового ступеня кандидата філософських наук1
7. Еноляты лития Конденсации Клайзена и Дикмана
8. Проблема периодизации истории науки
9. на тему Государственный долг и его последствия
10. Дипломная работа- Организация отбора персонала на предприятии