ВУЗ:
Составители:
Рубрика:
- 51 -
При первом варианте распараллеливания (программа
PI_02.C)
используют-
ся только (блокирующие) функции обмена ‘точка-точка’
MPI_Send/MPI_Recv
:
вычислительные узлы посылают MASTER-узлу частичные (определенные на
основе выполненных данным узлом ‘выстрелов’) значения
π
, главный про-
цесс суммирует их и выдает на печать усредненные значения:
// source code PI_02.C program
#include “mpi.h”
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#define DARTS 10000 /* number of throws at dartboard */
#define ROUNDS 100 /* number of times ‘darts’ is iterated */
#define MASTER 0 /* task ID of master task */
void srandom (unsigned seed);
double dboard (int darts);
#include “dboard.c” // including dboard.c file
int main(int argc, char *argv[])
{
double homepi, /* value of pi calculated by current task */
pi, /* average of pi after ‘darts’ is thrown */
avepi, /* average pi value for all iterations */
pirecv, /* pi received from worker */
pisum, /* sum of workers PI values */
t1, t2, // time’s moments
pi_prec=4.0*(atanl(1.0)-atan(0.0)); // pi precision
int taskid, /* task ID – also used as seed number */
numtasks, /* number of tasks */
source, /* source of incoming message */
rc, /* MPI’s return code */
i, n;
MPI_Status status;
rc = MPI_Init(&argc,&argv);
rc = MPI_Comm_size(MPI_COMM_WORLD,&numtasks);
rc = MPI_Comm_rank(MPI_COMM_WORLD,&taskid);
t1=MPI_Wtime(); // store start time calculated
srandom (taskid); // initialization random number generator by taskid value
avepi = 0;
for (i=0; i<ROUNDS; i++)
{
homepi = dboard(DARTS); // all tasks calculate pi by dartboard algorithm
if (taskid != MASTER) // It’s NOT MASTER!
{
- 51 - При первом варианте распараллеливания (программа PI_02.C) используют- ся только (блокирующие) функции обмена ‘точка-точка’ MPI_Send/MPI_Recv: вычислительные узлы посылают MASTER-узлу частичные (определенные на основе выполненных данным узлом ‘выстрелов’) значения π , главный про- цесс суммирует их и выдает на печать усредненные значения: // source code PI_02.C program #include “mpi.h” #include#include #include #define DARTS 10000 /* number of throws at dartboard */ #define ROUNDS 100 /* number of times ‘darts’ is iterated */ #define MASTER 0 /* task ID of master task */ void srandom (unsigned seed); double dboard (int darts); #include “dboard.c” // including dboard.c file int main(int argc, char *argv[]) { double homepi, /* value of pi calculated by current task */ pi, /* average of pi after ‘darts’ is thrown */ avepi, /* average pi value for all iterations */ pirecv, /* pi received from worker */ pisum, /* sum of workers PI values */ t1, t2, // time’s moments pi_prec=4.0*(atanl(1.0)-atan(0.0)); // pi precision int taskid, /* task ID – also used as seed number */ numtasks, /* number of tasks */ source, /* source of incoming message */ rc, /* MPI’s return code */ i, n; MPI_Status status; rc = MPI_Init(&argc,&argv); rc = MPI_Comm_size(MPI_COMM_WORLD,&numtasks); rc = MPI_Comm_rank(MPI_COMM_WORLD,&taskid); t1=MPI_Wtime(); // store start time calculated srandom (taskid); // initialization random number generator by taskid value avepi = 0; for (i=0; i
Страницы
- « первая
- ‹ предыдущая
- …
- 49
- 50
- 51
- 52
- 53
- …
- следующая ›
- последняя »