Advertisement
FR4GG13

[23.05][PRR]listing 5,6

May 23rd, 2018
100
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.56 KB | None | 0 0
  1. /*
  2. export PATH=$PATH:/usr/lib64/mpi/gcc/openmpi/bin
  3. export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib64/psm2
  4.  
  5. mpicc -o main main.c
  6. mpirun main
  7.  
  8. export PATH=$PATH:/usr/lib64/mpi/gcc/openmpi/bin
  9. export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib64/psm2
  10.  
  11. mpicc -o main main.c
  12. mpirun --mca pml ob1 --mca btl self,tcp main
  13.  
  14. //===========linijka do polaczenia sie z komputerami
  15. for i in `seq 11 25`; do ssh 10.16.121.$i mkdir cokolwiek "echo ok"; done
  16. //==================================================
  17.  
  18. */
  19.  
  20. #include <iostream>
  21. #include <stdlib.h>
  22. #include <mpi.h>
  23.  
  24. using namespace std;
  25.  
  26. void safePrintArray(int rank, int nProc, int *array, int size){
  27.     int i, n;
  28.     for(n=0;n<nProc;n++){
  29.         int id = n;
  30.         if(id == rank){
  31.             printf(" %d : ", id);
  32.             for(i=0; i<size; i++)
  33.                 printf(" %d ", array[i]);
  34.             printf("\n");
  35.         }
  36.         MPI_Barrier(MPI_COMM_WORLD);
  37.     }
  38. }
  39.  
  40. int main(int argc, char **argv)
  41. {
  42.     int id;
  43.     int size;
  44.     int root;
  45.     int buf[10];
  46.     int reducebuf[10] = {0};
  47.     int *sendbuf;
  48.     int i;
  49.  
  50.     MPI_Init(&argc, &argv);
  51.     MPI_Comm_rank(MPI_COMM_WORLD, &id);
  52.     MPI_Comm_size(MPI_COMM_WORLD, &size);
  53.  
  54.     for(i=0; i<10; i++)
  55.         buf[i] = i%(id+1);
  56.  
  57.     safePrintArray(id, size, buf, 10);
  58.  
  59.     if (id==0) printf("\n\n");
  60.     fflush(stdout);
  61.     MPI_Barrier(MPI_COMM_WORLD);
  62.  
  63.     root = 0;
  64.     MPI_Reduce(buf, reducebuf, 10, MPI_INT, MPI_MAX, root, MPI_COMM_WORLD);
  65.     //MPI_Allreduce(buf, reducebuf,) 10, MPI_INIT, MPI_MAX, MPI_COMM_WORLD);
  66.  
  67.     safePrintArray(id, size, reducebuf, 10);
  68.  
  69.     MPI_Finalize();
  70.     return 0;
  71. }
  72.  
  73. //LISTING 6================================================
  74.  
  75. #include <stdio.h>
  76. #include <math.h>
  77. #include <mpi.h>
  78. #include <stdlib.h>
  79.  
  80. int main(int argc, char **argv){
  81.     int my_rank, p;
  82.     int i,n;
  83.     double my_pi, pi, h, sum, x;
  84.  
  85.     if(argc<2){
  86.         printf("Poprawne użycie programu: program liczba_przedzialow calkowania\n");
  87.         exit(1);
  88.     }
  89.     MPI_Init(&argc, &argv);
  90.     MPI_Comm_rank(MPI_COMM_WORLD, &my_rank);
  91.     MPI_Comm_size(MPI_COMM_WORLD, &p);
  92.  
  93.     if(my_rank == 0)
  94.         n=atoi(argv[1]);
  95.  
  96.     MPI_Bcast(&n, 1, MPI_INT, 0, MPI_COMM_WORLD);
  97.  
  98.     h=1.0/(double)n;
  99.     /*Całka metodą trapezów*/
  100.     sum=0.0;
  101.     for (i=my_rank; i<n; i+=p){
  102.         x=h*((double)i+0.5);
  103.         sum+=4.0/(1.0+x*x);
  104.     }
  105.     my_pi=h*sum;
  106.  
  107.     MPI_Reduce(&my_pi, &pi, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD);
  108.  
  109.     if(my_rank == 0)
  110.         printf("pi=%.16f\n", pi);
  111.  
  112.     MPI_Finalize();
  113. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement