Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> обнаружить максимальное из магических чисел и сооб 
:(
    Опции темы
Veronika1995
Дата 25.2.2018, 14:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 12.11.2017

Репутация: нет
Всего: нет



Я не очень разбираюсь в 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;
}


Это сообщение отредактировал(а) Veronika1995 - 25.2.2018, 16:47
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0963 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.