Свежий номер №5 (430) / Параллельный стиль
 
Дата публикации: 11.02.2002

Константин Михайленко, const@anrb.ru

 
<< 1
Врезка

#include “mpi.h”

/* определение функции */

double F (double x)

{

double c = x*x*x;

return c;

}

int main (int argc, char **argv)

{

/* объявление рабочих переменных */

double sum, s, dx, a, b, x0, x1;

int i, n;

/* объявление переменных для MPI */

int ierror, myid, numproc;

MPI_Status status;

/* инициализация параллельной части приложения */

ierror = MPI_Init (&argc, &argv);

if (ierror != 0)

{

printf (“MPI initialization error: %d”, ierror);

return;

}

/* определение числа параллельных процессов в группе */

MPI_Comm_size (MPI_COMM_WORLD, &numproc);

/* определение идентификатора процесса */

MPI_Comm_rank (MPI_COMM_WORLD, &myid);

/* определение параметров интегрирования */

a = 0.0;

b = 1.0;

n = 20;

dx = (b - a)/n/numproc;

/* вычисление интеграла */

sum = 0.0;

x0 = a + dx*n*myid;

for (i = 0; i < n; i++)

{

x1 = x0 + dx;

sum += (F(x0) + F(x1))*dx/2.0;

x0 = x1;

}

/* отправка результата всеми процессами */

if (myid > 0)

{

MPI_Send(&sum, 1, MPI_DOUBLE, 0, 000+myid,

\MPI_COMM_WORLD);

}

/* получение результатов процессом 0 и суммирование */

if (myid == 0)

{

s = sum;

for (i = 0; i < numproc-1; i++)

{

MPI_Recv(&sum, 1, MPI_DOUBLE, MPI_ANY_SOURCE,

\MPI_ANY_TAG, MPI_COMM_WORLD, &status);

s += sum;

}

printf (“%g \n”, s);

}

MPI_Finalize();

}



 
<< 1
Врезка


Константин Михайленко
const@anrb.ru
 
кандидат физико-математических наук, старший научный сотрудник Института механики Уфимского научного центра РАН.


<< Еда и кластеры на скорую руку
Все материалы номера
Под законом Амдала >>