fork download
  1. #include <math.h>
  2. #include <mpi.h>
  3. #include <stdio.h>
  4. #include <stdlib.h>
  5. #include <time.h>
  6. int main(int argc, char *argv[] );
  7. int prime_number (int n, int id, int p);
  8. void timestamp ();
  9. int main (int argc , char *argv[] )
  10. purpose:
  11. main is the main program for PRIME_MPI.
  12. {
  13. int i;
  14. int id;
  15. int ierr;
  16. int n;
  17. int n_factor;
  18. int n_hi;
  19. int n_lo;
  20. int p;
  21. int primes;
  22. int primes_part;
  23. double wtime;
  24. n_lo = 1;
  25. n_hi = 262144;
  26. n_factor = 2;
  27.  
  28.  
  29. ierr = MPI_init ( &argc, &argv );
  30.  
  31. ierr = MPI_comm_size ( MPI_COMM_WORLD, &p );
  32.  
  33.  
  34. ierr = MPI_COMM_RANK (MPI_COMM_WORLD, &id );
  35. if ( id == 0)
  36. {
  37. timestamp ( );
  38. printf ( "\n" );
  39. printf ( "PRIME_MPI\n" );
  40. printf ( " C/MPI version\n" );
  41. printf ( "\n" );
  42. printf ( "An MPI example program to count number of primes.\n" );
  43. printf ( "The numberof processes is %d\n", p );
  44. printf ( "\n" );
  45. printf ( " N pi Time\n" );
  46. printf ( "\n" );
  47. }
  48. n = n_lo;
  49. while ( n <= n_hi )
  50. {
  51. if ( id == 0)
  52. {
  53. wtime = MPI_Wtime ( );
  54. }
  55. ierr = MPI_Bcast ( &n, 1, MPI_INT, 0, MPI_COMM_WORLD );
  56. primes_part = prime-number ( n, id, p );
  57. ierr = MPI_Reduce ( &primes_part, &primes, 1, MPI_INT, MPI_SUM, 0, MPI_COMM_WORLD );
  58. if ( id == 0 )
  59. {
  60. wtime = MPI_Wtime ( ) - wtime;
  61. printf ( " %8d %8d %14f\n", n, primes, wtime );
  62. }
  63. n = n * n_factor;
  64. }
  65.  
  66.  
  67. ierr = MPI_Finalize ( );
  68.  
  69.  
  70. if ( id == 0 )
  71. {
  72. printf ( "\n" );
  73. printf ( "PRIME_MPI - Master process: \n");
  74. printf ( " Normal end of execution. \n");
  75. timestamp ( );
  76. }
  77. return 0;
  78. }
  79. {
  80. int i;
  81. int j;
  82. int prime;
  83. int total;
  84. total = 0;
  85. for ( i = 2 + id; i <= n; i = i + p )
  86. {
  87. prime = 1;
  88. for ( j = 2; j < i; j ++ )
  89. {
  90. if ( ( i% j ) == 0 )
  91. {
  92. prime = 0;
  93. break;
  94. }
  95. }
  96. total = total + prime;
  97. }
  98. return total;
  99. }
Success #stdin #stdout #stderr 0.24s 38388KB
stdin
1
2
88
42
99
stdout
Standard output is empty
stderr
Error: unexpected symbol in "int main"
Execution halted