Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <string.h>
- #include "mpi.h"
- int main(int argc, char* argv[]){
- int my_rank,RecRank; /* rank of process */
- int p; /* number of processes */
- int source; /* rank of sender */
- int dest; /* rank of receiver */
- int tag0=0; /* tag for messages */
- int tag1=1;
- //char message[100]; /* storage for message */
- MPI_Status status ; /* return status for receive */
- //MPI_Comm newComm;
- /* 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);
- //MPI_Cart_create(MPI_COMM_WORLD,1,(int*)p,(int*)1,1,&new_comm);
- if(my_rank==0){
- source=p-1;
- }else{
- source=my_rank-1;
- }
- if(my_rank== p-1){
- dest=0;
- }else{
- dest=my_rank+1;
- }
- MPI_Send(&my_rank, 1, MPI_INT, dest, tag0, MPI_COMM_WORLD);
- while (1){
- MPI_Recv(&RecRank, 1, MPI_INT, source, MPI_ANY_TAG, MPI_COMM_WORLD, &status);
- if(status.MPI_TAG==0){
- if(RecRank>my_rank){
- MPI_Send(&RecRank, 1, MPI_INT, dest, tag0, MPI_COMM_WORLD);
- }else if(RecRank==my_rank){
- MPI_Send(&RecRank, 1, MPI_INT, dest, tag1, MPI_COMM_WORLD);
- }
- }else{
- if(RecRank!=my_rank){
- MPI_Send(&RecRank, 1, MPI_INT, dest, tag1, MPI_COMM_WORLD);
- }
- break;
- }
- }
- printf("liderul: %d\n",RecRank);
- /* shut down MPI */
- MPI_Finalize();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement