Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <mpi.h>
- #include <stdlib.h>
- #define N 16 // rozmiar macierzy
- #define S 4 // rozmiar paska
- main(int argc, char **argv)
- {
- int rank, size;
- int A[N][N], x[N], y[N], i, j, pasek[S], czesc[S][N];
- //macierz wektor wynik liczniki pasek czesc macierzy A
- MPI_Init (&argc, &argv);
- MPI_Comm_rank (MPI_COMM_WORLD, &rank);
- MPI_Comm_size (MPI_COMM_WORLD, &size);
- if ( rank == 0){
- for(i = 0; i < N; i++){ //wypelnianie macierzy i wektorow
- for(j = 0; j < N; j++){
- A[i][j] = rand()%10;
- x[i] = rand()%10;
- y[i] = 0;
- if ( i < S) {
- }
- }
- }
- for(i = 0; i < N; i++){ //drukowanie macierzy
- for(j = 0; j < N; j++){
- printf("%d ",A[i][j]);
- }
- printf("\n");
- }
- printf("Wektor :");
- for(i = 0; i < N; i++){ //drukowanie wektora
- printf("%d ",x[i]);
- }
- printf("\n");
- }
- MPI_Scatter(A, N*S , MPI_INTEGER, czesc, N*S, MPI_INTEGER, 0,
- MPI_COMM_WORLD); //rozpraszanie danych i dzielenie na "paczki" po S wierszy na proces
- MPI_Bcast(x, N, MPI_INTEGER, 0, MPI_COMM_WORLD);
- for(i = 0; i < S; i++){ //mnozenie macierzy
- pasek[i] = 0; //tutaj to felerne zerowanie paska
- for(j = 0; j < N; j++){
- pasek[i] += czesc[i][j]*x[j]; //kazdy proces mnozy swoja czesc wierszy przez wektor i umieszcza wynik w tablicy pasek
- }
- }
- MPI_Gather(pasek, S, MPI_INTEGER, y, S, MPI_INTEGER, 0, MPI_COMM_WORLD); //zbieranie informacji z paskow do wyniku y
- if ( rank == 0 ) { //drukowanie wyniku
- printf("\n");
- printf("Wynik to ");
- for(i = 0; i < N; i++){
- printf("%d ",y[i]);
- }
- printf("\n");
- }
- MPI_Finalize();
- return 0;
- }
Add Comment
Please, Sign In to add comment