fork(1) 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 master_stream cout;
  37. static char endl;
  38.  
  39. private:
  40. static int m_rank;
  41. static int m_size;
  42. };
  43.  
  44. int mpi::m_rank = 0;
  45. int mpi::m_size = 1;
  46. mpi::master_stream mpi::cout;
  47. char mpi::endl = '\n';
  48.  
  49.  
  50. int main(int argc, char** argv) {
  51. mpi::init(argc, argv);
  52.  
  53. double kek = cos(mpi::rank() + 10.0);
  54.  
  55. mpi::cout << "Hello, I'm master process" << mpi::endl;
  56. mpi::cout << "Min keks is " << mpi::min(kek) << mpi::endl;
  57.  
  58. mpi::finalize();
  59. return 0;
  60. }
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