Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "mpi.h"
- #include <iostream>
- #include <math.h>
- const int Tag = 0;
- const int TagSecond = 1;
- const int root = 0;
- double composition_array(int begin, int end) {
- double composition = 1;
- for (int i = begin; i < end; ++i) {
- composition *= 1 + 1 / (i * log(i));
- // std::cout << 1 + 1 / (i * log(i)) << " ";
- }
- // std::cout << std::endl;
- return composition;
- }
- int main() {
- int rank, comm_size;
- MPI_Init(NULL, NULL);
- MPI_Comm_rank(MPI_COMM_WORLD, &rank);
- MPI_Comm_size(MPI_COMM_WORLD, &comm_size);
- double *arr;
- double composition = 1;
- double buffer;
- int part_size;
- int begin, end;
- int n;
- MPI_Status status;
- if (root == rank) {
- std::cout << "n : ";
- std::cin >> n;
- n -= 1;
- part_size = n / comm_size;
- for (int i = root + 1; i < comm_size; ++i) {
- MPI_Send(&part_size, 1, MPI_INT, i, TagSecond, MPI_COMM_WORLD);
- }
- int shift = n % comm_size;
- int send_message;
- // std::cout << "'''''''''''''''''''''''" << std::endl;
- // std::cout << shift << " " << part_size << std::endl;
- // std::cout << "iiiiiiiiiiiiiiiiiiiiiiii" << std::endl;
- for (int i = root + 1; i < comm_size; ++i) {
- send_message = 2 + shift + part_size * i;
- MPI_Send(&send_message, 1, MPI_INT, i, Tag, MPI_COMM_WORLD);
- }
- // std::cout << rank << " : ";
- composition = composition_array(2, 2 + shift + part_size);
- for (int i = root + 1; i < comm_size; ++i) {
- MPI_Recv(&buffer, 1, MPI_DOUBLE, i, Tag, MPI_COMM_WORLD, &status);
- composition *= buffer;
- }
- } else {
- // MPI_Probe(root, Tag2, MPI_COMM_WORLD, &status);
- MPI_Recv(&part_size, 1, MPI_INT, root, TagSecond, MPI_COMM_WORLD, &status);
- MPI_Recv(&begin, 1, MPI_INT, root, Tag, MPI_COMM_WORLD, &status);
- // std::cout << part_size << std::endl;
- // std::cout << rank << " : ";
- double composition_tmp = composition_array(begin, begin + part_size);
- std::cout << begin << " " << part_size << std::endl;
- MPI_Send(&composition_tmp, 1, MPI_DOUBLE, root, Tag, MPI_COMM_WORLD);
- }
- if (rank == 0) {
- std::cout << rank << " : " << composition << std::endl;
- }
- MPI_Finalize();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement