fork download
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <mpi.h>
  4.  
  5. int main(int argc, char **argv) {
  6. MPI_Init(&argc, &argv);
  7. int rank, size;
  8. MPI_Comm_rank(MPI_COMM_WORLD, &rank);
  9. MPI_Comm_size(MPI_COMM_WORLD, &size);
  10.  
  11. int BUFFER_SIZE = 10;
  12. int buffer[BUFFER_SIZE];
  13. int in = 0, out = 0;
  14. int item;
  15. MPI_Status status;
  16.  
  17. if (rank == 0) { // Producer process
  18. for (int i = 0; i < 100; i++) {
  19. item = rand() % 100;
  20. while ((in + 1) % BUFFER_SIZE == out) ; // Wait while buffer is full
  21. buffer[in] = item;
  22. in = (in + 1) % BUFFER_SIZE;
  23. printf("Producer produced item %d
  24. ", item);
  25. MPI_Send(&item, 1, MPI_INT, 1, 0, MPI_COMM_WORLD);
  26. }
  27. } else if (rank == 1) { // Consumer process
  28. for (int i = 0; i < 100; i++) {
  29. while (in == out) ; // Wait while buffer is empty
  30. MPI_Recv(&item, 1, MPI_INT, 0, 0, MPI_COMM_WORLD, &status);
  31. printf("Consumer consumed item %d
  32. ", item);
  33. }
  34. }
  35.  
  36. MPI_Finalize();
  37. return 0;
  38. }
  39.  
Success #stdin #stdout #stderr 0.27s 40708KB
stdin
Standard input is empty
stdout
Standard output is empty
stderr
Error: unexpected symbol in "int main"
Execution halted