ВУЗ:
Составители:
Рубрика:
- 53 -
…
800000 throws aver.value of PI= 3.143230000000 (rel.error= -0.05212 %, time= 0.236 sec)
…
1000000 throws aver.value of PI= 3.142872000000 (rel.error= -0.04072 %, time= 0.293 sec)
Рассчитанные значения
π
являются весьма приближенными даже при
большом числе ‘выстрелов’, причем не во всех случаях увеличение числа
‘выстрелов’ вызывает возрастание точности представления искомой величи-
ны.
Ниже приведен вариант программы (файл
PI_03.C
) с использованием кол-
лективных функций (вместо функций семейства ‘точка-точка’); при этом в
MASTER-процессе функция
MPI_Reduce
суммирует величины
homepi
от всех
задач (сумма помещается в
pisum; homepi
при этом является буфером посыл-
ки,
pisum
– приемным буфером):
// source code PI_03.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, pisum, pi, avepi,
t1, t2, // time’s moments
pi_prec=4.0*(atanl(1.0)-atan(0.0)); // pi precision
int taskid, numtasks, rc, i:
MPI_Status status;
MPI_Init(&argc,&argv);
MPI_Comm_size(MPI_COMM_WORLD,&numtasks);
MPI_Comm_rank(MPI_COMM_WORLD,&taskid);
t1=MPI_Wtime(); // fix start time calculated
avepi = 0;
for (i=0; i<ROUNDS; i++)
{
homepi = dboard(DARTS);
rc = MPI_Reduce(&homepi, &pisum, 1, MPI_DOUBLE, MPI_SUM, MASTER,
MPI_COMM_WORLD);
if (rc != MPI_SUCCESS)
- 53 - … 800000 throws aver.value of PI= 3.143230000000 (rel.error= -0.05212 %, time= 0.236 sec) … 1000000 throws aver.value of PI= 3.142872000000 (rel.error= -0.04072 %, time= 0.293 sec) Рассчитанные значения π являются весьма приближенными даже при большом числе ‘выстрелов’, причем не во всех случаях увеличение числа ‘выстрелов’ вызывает возрастание точности представления искомой величи- ны. Ниже приведен вариант программы (файл PI_03.C) с использованием кол- лективных функций (вместо функций семейства ‘точка-точка’); при этом в MASTER-процессе функция MPI_Reduce суммирует величины homepi от всех задач (сумма помещается в pisum; homepi при этом является буфером посыл- ки, pisum – приемным буфером): // source code PI_03.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, pisum, pi, avepi, t1, t2, // time’s moments pi_prec=4.0*(atanl(1.0)-atan(0.0)); // pi precision int taskid, numtasks, rc, i: MPI_Status status; MPI_Init(&argc,&argv); MPI_Comm_size(MPI_COMM_WORLD,&numtasks); MPI_Comm_rank(MPI_COMM_WORLD,&taskid); t1=MPI_Wtime(); // fix start time calculated avepi = 0; for (i=0; i
Страницы
- « первая
- ‹ предыдущая
- …
- 51
- 52
- 53
- 54
- 55
- …
- следующая ›
- последняя »