#include #include #include #include #include namespace mpi = boost::mpi; using namespace std; int main([[maybe_unused]] int argc, [[maybe_unused]] char** argv) { mpi::environment env{argc, argv}; mpi::communicator world; int limit{100'000'000}; int world_size; MPI_Comm_size(MPI_COMM_WORLD, &world_size); int id; MPI_Comm_rank(MPI_COMM_WORLD, &id); double pi{4}; double signTerm; int skip = 2*(world_size -1); if (id > 0) { pi = 0; int i{id * 2 + 1}; while (i < limit) { if (i%4 == 1) { signTerm = 4; } else { signTerm = -4; } pi += signTerm / static_cast(i); i += skip; } } double sum{0}; reduce(world, pi, sum, std::plus(), 0); if (id == 0) { cout << setprecision(10); cout << "Pi is about " << sum << endl; } return 0; }