Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- ============================================================================
- Name : Laboratorul4.c
- Author : Author
- Version :
- Copyright : Your copyright notice
- Description : Hello MPI World in C
- ============================================================================
- */
- #include <stdio.h>
- #include <string.h>
- #include "mpi.h"
- int main(int argc, char* argv[]){
- int my_rank; /* rank of process */
- int p; /* number of processes */
- int source; /* rank of sender */
- int dest; /* rank of receiver */
- int tag=0; /* tag for messages */
- char message[100]; /* storage for message */
- int d = 3;
- int k;
- int source_virtual;
- int masca = (1<<d)-1;
- source = 8;
- //dest = 7;
- MPI_Status status ; /* return status for receive */
- /* start up MPI */
- MPI_Init(&argc, &argv);
- /* find out process rank */
- MPI_Comm_rank(MPI_COMM_WORLD, &my_rank);
- /* find out number of processes */
- MPI_Comm_size(MPI_COMM_WORLD, &p);
- int id_virtual = source ^ my_rank;
- for(k = d - 1; k >= 0; k--)
- {
- masca = masca ^ 1 << k;
- if((id_virtual & masca) == 0)
- {
- if((id_virtual & 1<<k) == 0)
- {
- dest = id_virtual ^ 1<<k ;
- dest = dest ^ source;
- printf("Mesaj\n");
- sprintf(message, "Hello");
- MPI_Send(message, strlen(message)+1, MPI_CHAR,
- dest, tag, MPI_COMM_WORLD);
- }
- else
- {
- source_virtual = id_virtual ^ 1<<k;
- source_virtual = source_virtual ^ source;
- MPI_Recv(message, 100, MPI_CHAR, source_virtual , tag,
- MPI_COMM_WORLD, &status);
- printf("%d sent %s to %d\n",source_virtual, message, my_rank);
- }
- }
- MPI_Barrier(MPI_COMM_WORLD);
- }
- /* shut down MPI */
- MPI_Finalize();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement