1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
|
#include <mpi.h>
#include <cstdio>
#include <cstring>
#include <cmath>
int main(int argc, char *argv[])
{
MPI::Init();
char cmd[32] = "./cpi-worker-cxx.exe";
if (argc > 1) std::strcpy(cmd, argv[1]);
std::printf("%s -> %s\n", argv[0], cmd);
MPI::Intercomm worker;
worker = MPI::COMM_SELF.Spawn(cmd, MPI::ARGV_NULL, 5,
MPI::INFO_NULL, 0);
int n = 100;
worker.Bcast(&n, 1, MPI::INT, MPI::ROOT);
double pi;
worker.Reduce(MPI::BOTTOM, &pi, 1, MPI::DOUBLE,
MPI::SUM, MPI::ROOT);
worker.Disconnect();
std::printf("pi: %.16f, error: %.16f\n", pi, std::fabs(M_PI-pi));
MPI::Finalize();
return 0;
}
|