Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > обнаружить максимальное из магических чисел и сооб


Автор: Veronika1995 25.2.2018, 14:10
Я не очень разбираюсь в Open MPI. Вот нашла программный код похожего задания, но не знаю как его переделать. Помогите пожалуйста. Вот задание: Написать программу на С, используя Open MPI: Запущено n процессов, каждый из которых знает некоторое магическое число. Требуется обнаружить максимальное из магических чисел и сообщить его пользователю с указанием номера процесса-владельца. Магическое число определить как некоторую произвольную функцию от номера процесса. Решить задачу,используя парадигму «управляющий-рабочий». Максимальное магическое число с номером процесса-владельца в результате должен знать каждый процесс.

Код

#include <mpi.h>
#include <stdio.h>
#include <cstdlib>
#include <ctime>

int main() {

  MPI_Init(NULL, NULL);
  int world_size;
  MPI_Comm_size(MPI_COMM_WORLD, &world_size);
   int world_rank;
  MPI_Comm_rank(MPI_COMM_WORLD, &world_rank);
   int randoms[world_size];
  for(int j = 0; j < world_size; j++) {
    randoms[j] = rand() % 300;
  }
  if(world_rank != 0) {
    srand(time(0));
    int cost = randoms[world_rank];
    MPI_Ssend(&cost, 1, MPI_INT, 0, 0, MPI_COMM_WORLD);
  }
  
  int offers[world_size];
  int cost;
  if(world_rank == 0) {
    for(int i = 1; i < world_size; i++) {
      MPI_Recv(&cost, 1, MPI_INT, i, 0, MPI_COMM_WORLD, MPI_STATUS_IGNORE);
      offers[i] = cost;
      printf("received cost %d from bidder #%d\n", offers[i], i);
    }
    int max_cost = 0;
    int winner_index = 0;

    for(int i = 1; i < world_size; i++) {
      if(max_cost < offers[i]) {
        max_cost = offers[i];
        winner_index = i;
      }
    }
    printf("\n------\nbidder #%d wins with cost %d$\n", winner_index, max_cost);

  }
  MPI_Finalize();

  return 0;
}

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)