fork download
  1. #include <math.h>
  2.  
  3. #include <mpi.h>
  4.  
  5. #include <stdio.h>
  6.  
  7. #include <stdlib.h>
  8.  
  9. #include <time.h>
  10.  
  11. int main(int argc, char *argv[] );
  12.  
  13. int prime_number (int n, int id, int p);
  14.  
  15. void timestamp ();
  16.  
  17. int main (int argc , char *argv[] )
  18.  
  19. purpose:
  20.  
  21. main is the main program for PRIME_MPI.
  22.  
  23. {
  24.  
  25. int i;
  26.  
  27. int id;
  28.  
  29. int ierr;
  30.  
  31. int n;
  32.  
  33. int n_factor;
  34.  
  35. int n_hi;
  36.  
  37. int n_lo;
  38.  
  39. int p;
  40.  
  41. int primes;
  42.  
  43. int primes_part;
  44.  
  45. double wtime;
  46.  
  47. n_lo = 1;
  48.  
  49. n_hi = 262144;
  50.  
  51. n_factor = 2;
  52.  
  53. /*
  54.  
  55.   Initialize MPI.
  56.  
  57. */
  58.  
  59. ierr = MPI_init ( &argc, &argv );
  60.  
  61. /*
  62.  
  63.   Get the number of proesses.
  64.  
  65. */
  66.  
  67. ierr = MPI_comm_size ( MPI_COMM_WORLD, &p );
  68.  
  69. /*
  70.  
  71.   determine this processes's rank.
  72.  
  73. */
  74.  
  75. ierr = MPI_COMM_RANK (MPI_COMM_WORLD, &id );
  76.  
  77. if ( id == 0)
  78.  
  79. {
  80.  
  81. timestamp ( );
  82.  
  83. printf ( "\n" );
  84.  
  85. printf ( "PRIME_MPI\n" );
  86.  
  87. printf ( " C/MPI version\n" );
  88.  
  89. printf ( "\n" );
  90.  
  91. printf ( "An MPI example program to count number of primes.\n" );
  92.  
  93. printf ( "The numberof processes is %d\n", p );
  94.  
  95. printf ( "\n" );
  96.  
  97. printf ( " N pi Time\n" );
  98.  
  99. printf ( "\n" );
  100.  
  101. }
  102.  
  103. n = n_lo;
  104.  
  105. while ( n <= n_hi )
  106.  
  107. {
  108.  
  109. if ( id == 0)
  110.  
  111. {
  112.  
  113. wtime = MPI_Wtime ( );
  114.  
  115. }
  116.  
  117. ierr = MPI_Bcast ( &n, 1, MPI_INT, 0, MPI_COMM_WORLD );
  118.  
  119. primes_part = prime-number ( n, id, p );
  120.  
  121. ierr = MPI_Reduce ( &primes_part, &primes, 1, MPI_INT, MPI_SUM, 0, MPI_COMM_WORLD );
  122.  
  123. if ( id == 0 )
  124.  
  125. {
  126.  
  127. wtime = MPI_Wtime ( ) - wtime;
  128.  
  129. printf ( " %8d %8d %14f\n", n, primes, wtime );
  130.  
  131. }
  132.  
  133. n = n * n_factor;
  134.  
  135. }
  136.  
  137. /*
  138.  
  139. Terminate MPI.
  140.  
  141. */
  142.  
  143. ierr = MPI_Finalize ( );
  144.  
  145. /*
  146.  
  147. Terminate.
  148.  
  149. */
  150.  
  151. if ( id == 0 )
  152.  
  153. {
  154.  
  155. printf ( "\n" );
  156.  
  157. printf ( "PRIME_MPI - Master process: \n");
  158.  
  159. printf ( " Normal end of execution. \n");
  160.  
  161. timestamp ( );
  162.  
  163. }
  164.  
  165. return 0;
  166.  
  167. }
  168.  
  169. {
  170.  
  171. int i;
  172.  
  173. int j;
  174.  
  175. int prime;
  176.  
  177. int total;
  178.  
  179. total = 0;
  180.  
  181. for ( i = 2 + id; i <= n; i = i + p )
  182.  
  183. {
  184.  
  185. prime = 1;
  186.  
  187. for ( j = 2; j < i; j ++ )
  188.  
  189. {
  190.  
  191. if ( ( i% j ) == 0 )
  192.  
  193. {
  194.  
  195. prime = 0;
  196.  
  197. break;
  198.  
  199. }
  200.  
  201. }
  202.  
  203. total = total + prime;
  204.  
  205. }
  206.  
  207. return total;
  208.  
  209. }
Success #stdin #stdout #stderr 0.21s 38568KB
stdin
Standard input is empty
stdout
Standard output is empty
stderr
Error: unexpected symbol in "int main"
Execution halted