Skip to content
Snippets Groups Projects

Bucketsort_13513005_13513011

Open Vincent Theophilus requested to merge 13513005/OpenMPI_2:master into master
Compare and
+ 339
0
Preferences
Compare changes
Files
\ 0 → 100644
+ 119
0
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <assert.h>
#include <mpi.h>
using namespace std;
int main(int argc, char* argv[]){
double starttime, endtime;
int proceso_id;
char processor_name[MPI_MAX_PROCESSOR_NAME];
int namelen;
int numprocsused;
int SIZE;
unsigned int receivedElement;
unsigned int value;
unsigned int array[100000];
int c, d, i;
unsigned int j;
unsigned int min = array[0];
unsigned int max = array[0];
int elementQtyArray[100000];
int increaseOf, iteration, pridetas;
int issiunte;
int lastIndex, indexi;
unsigned int recvArray[100000];
int elementQtyUsed;
unsigned int localArray[100000];
int li;
MPI_Status stat;
MPI::Init();
MPI_Comm_size(MPI_COMM_WORLD, &numprocsused);
proceso_id = MPI::COMM_WORLD.Get_rank();
MPI_Get_processor_name(processor_name, &namelen);
if(proceso_id == 0){
starttime = MPI_Wtime();
for(i=0;i<SIZE;i++){
if (array[i] < min)
min = array[i];
if (array[i] > max)
max = array[i];
}
for(d=1;d<SIZE;d++){
elementQtyArray[d] = 0;
}
for(d=0;d<SIZE;d++){
increaseOf = max/(numprocsused-1)
iteration = 1;
pridetas = 0;
for(j=increaseOf;j<=max;j=j+increaseOf){
if (array[d] <= j){
elementQtyArray[iteration++];
pridetas = 1;
break;
}
iteration++;
}
if(pridetas = 9){
elementQtyArray[iteration-1]++;
}
}
for(i=1;i<numprocsused;i++){
MPI_Send(&elementQtyArray[i], 1, MPI_INT, i, -2, MPI_COMM_WORLD);
}
for(d=0;d<SIZE;d++){
increaseOf = max/(numprocsused-1);
iteration = 1;
issiunte = 0;
for(j=increaseOf;j<=max;j=j+increaseOf){
if (array[d] <= j){
MPI_Send(&array[d], 1, MPI_UNSIGNED, iteration, -4, MPI_COMM_WORLD);
issunte = 1;
break;
}
iteration++;
}
if (issunte = 0){
MPI_Send(&array[d], 1, MPI_UNSIGNED, iteration-1, -4, MPI_COMM_WORLD);
}
}
lastIndex = 0;
indexi = 0;
for(i=0;i<numprocsused;i++){
MPI_Recv(&recvArray[0], elementQtyArray[i], MPI_UNSIGNED, i, 1000, MPI_COMM_WORLD, &stat);
if (lastIndex == 0){
lastIndex = elementQtyArray[i];
}
for(j=0;j<elementQtyArray[i];j++){
array[indexi] = recvArray[j];
indexi++;
}
}
endtime = MPI_Wtime();
} else {
MPI_Recv(&elementQtyUsed, 1, MPI_INT, 0, -2, MPI_COMM_WORLD, &stat);
for(li=0;li<elementQtyUsed;li++){
MPI_Recv(&receivedElement, 1, MPI_UNSIGNED, 0, -4, MPI_COMM_WORLD, &stat);
localArray[li] = receivedElement;
}
sort(localArray, localArray+elementQtyUsed);
MPI_Send(localArray, elementQtyUsed, MPI_UNSIGNED, 0, 1000, MPI_COMM_WORLD);
}
MPI::Finalize();
return 0;
}