Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <mpi.h>
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <time.h>
- #include <unistd.h>
- #define N 10
- int main(int argc, char **argv) {
- int rank, i, p, q, minLoc = 9999999, minGlobal = 9999999;
- int *tab_org, *tab_cpy, *tab_mins;
- MPI_Init(&argc, &argv);
- MPI_Comm_rank(MPI_COMM_WORLD, &rank);
- MPI_Comm_size(MPI_COMM_WORLD, &p);
- q = N / p;
- srand(time(NULL));
- if (rank == 0) {
- tab_org = malloc(sizeof(int) * N);
- for (i = 0; i < N; i++) {
- tab_org[i] = rand() % 30;
- printf("%d\n", tab_org[i]);
- }
- tab_mins = malloc(sizeof(int) * p);
- for (i = 0; i < p; i++) {
- MPI_Send(tab_org + i * q, q, MPI_INT, i, 1, MPI_COMM_WORLD);
- }
- }
- tab_cpy = malloc(sizeof(int) * q);
- MPI_Recv(tab_cpy, q, MPI_INT, 0, 1, MPI_COMM_WORLD, NULL);
- for (i = 0; i < q; i++) {
- if (minLoc > tab_cpy[i])
- minLoc = tab_cpy[i];
- }
- MPI_Send(&minLoc, 1, MPI_INT, 0, 2, MPI_COMM_WORLD);
- if (rank == 0) {
- for (i = 0; i < p; i++) {
- MPI_Recv(&tab_mins[i], 1, MPI_INT, i, 2, MPI_COMM_WORLD, NULL);
- if (minGlobal > tab_mins[i]) {
- minGlobal = tab_mins[i];
- }
- }
- }
- MPI_Bcast(&minGlobal, 1, MPI_INT, 0, MPI_COMM_WORLD);
- printf("WYNIK : %d\n", minGlobal);
- MPI_Finalize();
- return EXIT_SUCCESS;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement