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

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

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

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

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

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

от 25%

Подписываем

договор

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

Скидка 25% при заказе до 8.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. на тему- Внешнеэкономическая сделка- понятие и форма
2. Потребность лошадей в питательных веществах и энергии
3. в никуда для разрешения очередной чрезвычайной проблемы продовольствие вслед за служивыми естественно п
4. голубой. Более подробные требования к фотографии смотрите на нашем сайте
5. 11р 305 від 12 березня 2003 року ПОЛОЖЕННЯ про дошкільний навчальний заклад Загальні питання 1
6. академическим Такой рисунок изучает натуру а также приемы и способы передачи этой натуры
7. Психология эмоциональной сферы личности
8. тема Студент ка курса зао
9. А що дотримуються політичного розуміння нації
10. Права на чужие вещи