packages feed

LogicGrowsOnTrees-MPI-1.0.0: c-sources/LogicGrowsOnTrees-MPI.c

#include <mpi.h>
#include <stdlib.h>

#include "LogicGrowsOnTrees-MPI.h"

void LogicGrowsOnTrees_MPI_finalizeMPI() {{{
    MPI_Finalize();
}}}

void LogicGrowsOnTrees_MPI_getMPIInformation(int *i_am_supervisor, int *number_of_workers) {{{
    int my_rank;
    MPI_Comm_rank(MPI_COMM_WORLD,&my_rank);
    *i_am_supervisor = (my_rank == 0);

    MPI_Comm_size(MPI_COMM_WORLD,number_of_workers);
    --(*number_of_workers);
}}}

void LogicGrowsOnTrees_MPI_initializeMPI() {{{
    MPI_Init(NULL,NULL);
}}}

void LogicGrowsOnTrees_MPI_receiveBroadcastMessage(char **message, int *size) {{{
    MPI_Bcast(size,1,MPI_INT,0,MPI_COMM_WORLD);
    *message = (char*)malloc((size_t)*size);
    MPI_Bcast(*message,*size,MPI_CHAR,0,MPI_COMM_WORLD);
}}}

void LogicGrowsOnTrees_MPI_sendBroadcastMessage(char *message, int size) {{{
    MPI_Bcast(&size,1,MPI_INT,0,MPI_COMM_WORLD);
    MPI_Bcast(message,size,MPI_CHAR,0,MPI_COMM_WORLD);
}}}

void LogicGrowsOnTrees_MPI_sendMessage(char *message, int size, int destination) {{{
    MPI_Send(message,size,MPI_CHAR,destination,0,MPI_COMM_WORLD);
}}}

void LogicGrowsOnTrees_MPI_tryReceiveMessage(int* source, char** message, int *size) {{{
    int flag;
    MPI_Status status;
    MPI_Iprobe(MPI_ANY_SOURCE,0,MPI_COMM_WORLD,&flag,&status);
    if(flag) {
        *source = status.MPI_SOURCE;
        MPI_Get_count(&status,MPI_CHAR,size);
        *message = (char*)malloc((size_t)*size);
        MPI_Recv(*message,*size,MPI_CHAR,*source,0,MPI_COMM_WORLD,MPI_STATUS_IGNORE);
    } else {
        *source = -1;
    }
}}}