Guest User

Untitled

a guest
Jan 24th, 2018
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.58 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <mpi.h>
  3. #include <stdlib.h>
  4. #define N 16 // rozmiar macierzy
  5. #define S 4 // rozmiar paska
  6.  
  7.    main(int argc, char **argv)
  8.    {
  9.  
  10. int rank, size;
  11. int A[N][N], x[N], y[N], i, j, pasek[S], czesc[S][N];
  12. //macierz wektor wynik liczniki  pasek    czesc macierzy A
  13.  
  14.   MPI_Init (&argc, &argv);
  15.   MPI_Comm_rank (MPI_COMM_WORLD, &rank);
  16.   MPI_Comm_size (MPI_COMM_WORLD, &size);
  17.  
  18. if ( rank == 0){
  19. for(i = 0; i < N; i++){ //wypelnianie macierzy i wektorow
  20.  for(j = 0; j < N; j++){
  21.         A[i][j] = rand()%10;
  22.         x[i] = rand()%10;
  23.         y[i] = 0;
  24.         if ( i < S) {
  25.   }
  26.  }
  27. }
  28.  
  29.  
  30. for(i = 0; i < N; i++){ //drukowanie macierzy
  31.  for(j = 0; j < N; j++){
  32.         printf("%d ",A[i][j]);
  33.  }
  34. printf("\n");
  35. }
  36. printf("Wektor :");
  37. for(i = 0; i < N; i++){ //drukowanie wektora
  38. printf("%d ",x[i]);
  39. }
  40. printf("\n");
  41. }
  42.  
  43. MPI_Scatter(A, N*S , MPI_INTEGER, czesc, N*S, MPI_INTEGER, 0,
  44. MPI_COMM_WORLD); //rozpraszanie danych i dzielenie na "paczki" po S wierszy na proces
  45. MPI_Bcast(x, N, MPI_INTEGER, 0, MPI_COMM_WORLD);
  46.  
  47. for(i = 0; i < S; i++){ //mnozenie macierzy
  48.  pasek[i] = 0; //tutaj to felerne zerowanie paska
  49.  for(j = 0; j < N; j++){
  50.  pasek[i] += czesc[i][j]*x[j]; //kazdy proces mnozy swoja czesc wierszy przez wektor i umieszcza wynik w tablicy pasek
  51.  }
  52. }
  53.  
  54. MPI_Gather(pasek, S, MPI_INTEGER, y, S, MPI_INTEGER, 0, MPI_COMM_WORLD); //zbieranie informacji z paskow do wyniku y
  55.  
  56. if ( rank == 0 ) { //drukowanie wyniku
  57. printf("\n");
  58. printf("Wynik to ");
  59.  for(i = 0; i < N; i++){
  60. printf("%d ",y[i]);
  61.  }
  62. printf("\n");
  63. }
  64. MPI_Finalize();
  65. return 0;
  66. }
Add Comment
Please, Sign In to add comment