Untitled
unknown
plain_text
4 years ago
2.1 kB
11
Indexable
#include "utility.h"
#include <stdio.h>
#include <stdlib.h>
#include <sys/time.h>
#include <mpi.h>
#define IS_NOT_PRIME_TAG 5
int main(int argc,char **argv) {
Args ins__args;
parseArgs(&ins__args, &argc, argv);
//program input argument
long inputArgument = ins__args.arg;
int isPrime, isPrimeFinal, received=1;
//int summaryIsPrime = 1;
long mine;
MPI_Request request;
int ready;
struct timeval ins__tstart, ins__tstop;
int myrank,nproc;
MPI_Init(&argc,&argv);
// obtain my rank
MPI_Comm_rank(MPI_COMM_WORLD,&myrank);
// and the number of processes
MPI_Comm_size(MPI_COMM_WORLD,&nproc);
if(!myrank)
gettimeofday(&ins__tstart, NULL);
// run your computations here (including MPI communication)
//odtad czekam na jakiegos receiva
MPI_Irecv(&received, 1, MPI_INT, MPI_ANY_SOURCE , IS_NOT_PRIME_TAG, MPI_COMM_WORLD, &request);
isPrime = 1;
for(mine = myrank+2; mine * mine<inputArgument; mine+=nproc)
{
MPI_Test(&request, &ready, IS_NOT_PRIME_TAG);
if(ready){
printf("\nmy rank is %d\n", myrank);
break;
}
if(!(inputArgument % mine))
{
isPrime = 0;
break;
}
}
//wysylam do wszystkich wyniki
if (isPrime == 0) {
//summaryIsPrime = 0;
printf("\nI found proof: %d\n", myrank);
for(int i=0; i<nproc; i++) {
if (i != myrank){
MPI_Isend(&isPrime, 1, MPI_INT, i, IS_NOT_PRIME_TAG, MPI_COMM_WORLD, &request);
}
}
//czekam na zakonczenie receiva
//MPI_Wait(&request, IS_NOT_PRIME_TAG);
printf("\nNie jest pierwsza");
}
/*if (summaryIsPrime == 1 ) {
printf("\nJest pierwsza");
}*/
// synchronize/finalize your computations
MPI_Reduce (&isPrime, &isPrimeFinal, 1, MPI_INT, MPI_SUM, 0, MPI_COMM_WORLD);
//if(!myrank)
//{
// if(isPrimeFinal == nproc)
// {
// printf("\nJest pierwsza: %d", isPrimeFinal);
// } else {
// printf("\nNie jest pierwsza: %d", isPrimeFinal);
// }
//}
if (!myrank) {
gettimeofday(&ins__tstop, NULL);
ins__printtime(&ins__tstart, &ins__tstop, ins__args.marker);
}
MPI_Finalize();
}Editor is loading...