MPI собирает/уменьшает путаницу в операциях?

В учебнике boost есть примеры операций сбора и сокращения. Код для сбора выглядит следующим образом:

#include 
#include 
#include 
#include 
namespace mpi = boost::mpi;

int main(int argc, char* argv[])
{
  mpi::environment env(argc, argv);
  mpi::communicator world;

  std::srand(time(0) + world.rank());
  int my_number = std::rand();
  if (world.rank() == 0) {
    std::vector all_numbers;
    gather(world, my_number, all_numbers, 0);
    for (int proc = 0; proc < world.size(); ++proc)
      std::cout << "Process #" << proc << " thought of "
                << all_numbers[proc] << std::endl;
  } else {
    gather(world, my_number, 0);
  }

  return 0;
}

И пример для сокращения выглядит следующим образом:

#include 
#include 
#include 
namespace mpi = boost::mpi;

int main(int argc, char* argv[])
{
  mpi::environment env(argc, argv);
  mpi::communicator world;

  std::srand(time(0) + world.rank());
  int my_number = std::rand();

  if (world.rank() == 0) {
    int minimum;
    reduce(world, my_number, minimum, mpi::minimum(), 0);
    std::cout << "The minimum value is " << minimum << std::endl;
  } else {
    reduce(world, my_number, mpi::minimum(), 0);
  }

  return 0;
}

В обоих этих примерах у нас есть условие if/else следующего вида:

if(world.rank() == 0){
  //gather or reduce operation
  //Output
}else{
  //gather or reduce operation
}

Чего я здесь не понимаю, так это разницы между коллективной операцией в if и whats в else? Есть разница в количестве параметров, но я не совсем понимаю, как работает логика.

Спасибо

5
задан Luc Touraille 24 July 2012 в 09:37
поделиться