Program Listing for File mpi_init_utils.hpp

Return to documentation for file (include/uitsl/mpi/mpi_init_utils.hpp)

#pragma once
#ifndef UITSL_MPI_MPI_INIT_UTILS_HPP_INCLUDE
#define UITSL_MPI_MPI_INIT_UTILS_HPP_INCLUDE

#include <assert.h>
#include <limits>
#include <numeric>
#include <stddef.h>

#include <mpi.h>

#include "../../uit_emp/base/errors.hpp"

#include "../debug/safe_cast.hpp"
#include "../utility/print_utils.hpp"

#include "audited_routines.hpp"
#include "comm_utils.hpp"
#include "group_utils.hpp"
#include "proc_id_t.hpp"
#include "request_utils.hpp"
#include "status_utils.hpp"

namespace uitsl {

inline void mpi_init_multithread(int *argc, char ***argv) {
  int res{};
  UITSL_Init_thread(argc, argv, MPI_THREAD_MULTIPLE, &res);
  if (res < MPI_THREAD_MULTIPLE) uit_emp::NotifyWarning(
    "MPI implementation may not provide full multithread support."
  );
}

inline void mpi_init_multithread() {
  int argc{};
  mpi_init_multithread(&argc, nullptr);
}

inline void mpi_init() {
  int argc{};
  UITSL_Init(&argc, nullptr);
}

inline bool is_mpi_initialized() {
  int flag{};
  UITSL_Initialized(&flag);
  return flag;
}

} // namespace uitsl

#endif // #ifndef UITSL_MPI_MPI_INIT_UTILS_HPP_INCLUDE