fork download
  1. #include <cmath>
  2. #include <mpi.h>
  3.  
  4. class mpi {
  5. public:
  6. static void init(int argc, char** argv) {
  7. MPI_Init(&argc, &argv);
  8.  
  9. MPI_Comm_rank(MPI_COMM_WORLD, &m_rank);
  10. MPI_Comm_size(MPI_COMM_WORLD, &m_size);
  11. }
  12.  
  13. static void finalize() {
  14. MPI_Finalize();
  15. }
  16.  
  17. static int rank() noexcept { return m_rank; }
  18. static int size() noexcept { return m_size; }
  19.  
  20. static double min(double value) {
  21. double global_min = 0.0;
  22. MPI_Allreduce(&value, &global_min, 1, MPI_DOUBLE, MPI_MIN, MPI_COMM_WORLD);
  23. return global_min;
  24. }
  25.  
  26. class master_stream {
  27. public:
  28. template<class T>
  29. master_stream &operator<<(const T &x) {
  30. if (m_rank == 0)
  31. std::cout << x;
  32. return *this;
  33. }
  34. };
  35.  
  36. static inline master_stream cout{};
  37. static inline char endl = '\n';
  38.  
  39. private:
  40. mpi() = default;
  41. static inline int m_rank = 0;
  42. static inline int m_size = 1;
  43. };
  44.  
  45. int main(int argc, char** argv) {
  46. mpi::init(argc, argv);
  47.  
  48. double kek = cos(mpi::rank() + 10.0);
  49.  
  50. mpi::cout << "Hello, I'm master process" << mpi::endl;
  51. mpi::cout << "Min keks is " << mpi::min(kek) << mpi::endl;
  52.  
  53. mpi::finalize();
  54. return 0;
  55. }
Compilation error #stdin compilation error #stdout 0s 0KB
stdin
Standard input is empty
compilation info
prog.cpp:2:17: fatal error: mpi.h: No such file or directory
 #include <mpi.h>
                 ^
compilation terminated.
stdout
Standard output is empty