Advertisement
Guest User

Untitled

a guest
Nov 24th, 2014
137
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.03 KB | None | 0 0
  1. #include <iostream>
  2. #include <mpi.h>
  3. #include <cstdlib>
  4. #include <ctime>
  5. #include <algorithm>
  6.  
  7. int main(int argc , char ** argv){
  8.  
  9.     using namespace std;
  10.  
  11.     const int SIZE=100;
  12.     int id, nproc,i,j=0,arranged[SIZE],a[SIZE];
  13.    
  14.     MPI_Status status;
  15.     MPI_Init(&argc,&argv);
  16.     MPI_Comm_size(MPI_COMM_WORLD, &nproc);
  17.     MPI_Comm_rank(MPI_COMM_WORLD, &id) ;
  18.    
  19.     int b[nproc],place[nproc]={0};
  20.  
  21.     if(id==0){
  22.    
  23.        srand((unsigned)time(NULL));
  24.  
  25.        int number=nproc, sample, multiplier=1;
  26.  
  27.         for(i=0;i<100;i++){
  28.             a[i]=rand()%100;
  29.             cout<<a[i]<<" ";
  30.         }
  31.         cout<<endl;
  32.  
  33.         do{
  34.            number/=10;
  35.            multiplier*=10;
  36.         }while(number);
  37.             cout<<multiplier<<endl;
  38.             sample=nproc*multiplier;
  39.            
  40.         int s[sample];
  41.  
  42.             cout<<sample<<endl;
  43.  
  44.         for(i=0;i<sample;i++){
  45.             s[i]=a[rand()%SIZE];
  46.             cout<<s[i]<<" ";
  47.         }
  48.  
  49.         sort(s, s+sample);
  50.  
  51.         for(i=0;i<nproc;i++){
  52.             b[i]=s[multiplier*(i+1)-1];
  53.         }
  54.  
  55.  
  56.  
  57.         for(i=0;i<SIZE;i++){
  58.             if(a[i]<b[id]){
  59.              arranged[j++]=a[i];
  60.             }
  61.         }
  62.  
  63.         place[id]=j;  
  64.  
  65.         sort(arranged, arranged+j);
  66.         for(i=0;i<j;i++){
  67.         }
  68.     }
  69.  
  70.         MPI_Bcast(&b, nproc, MPI_INT, 0, MPI_COMM_WORLD);
  71.         MPI_Bcast(&a, SIZE, MPI_INT, 0, MPI_COMM_WORLD);
  72.  
  73.     if(id!=0){
  74.  
  75.         if(id==nproc-1){
  76.             for(i=0;i<SIZE;i++){
  77.                  if(a[i]>=b[id]){
  78.                     j++;
  79.                 }
  80.             }
  81.         }else{
  82.             for(i=0;i<SIZE;i++){
  83.                  if(a[i]>b[id-1] && a[i]<=b[id]){
  84.                     j++;
  85.                  }
  86.             }
  87.         }
  88.  
  89.         MPI_Send(&id,1,MPI_INT,0,123,MPI_COMM_WORLD);
  90.         MPI_Send(&j,1,MPI_INT,0,234,MPI_COMM_WORLD);
  91.  
  92.         int slave[j];
  93.         j=0;
  94.  
  95.         if(id==nproc-1){
  96.             for(i=0;i<SIZE;i++){
  97.                 if(a[i]>=b[id]){
  98.                     slave[j++]=a[i];
  99.                 }
  100.             }
  101.  
  102.         }else{
  103.             for(i=0;i<SIZE;i++){
  104.                 if(a[i]>b[id-1] && a[i]<=b[id]){
  105.                     slave[j++]=a[i];
  106.                 }
  107.             }
  108.         }
  109.         sort(slave,slave+j);
  110.  
  111.         MPI_Send(&id,1,MPI_INT,0,123,MPI_COMM_WORLD);
  112.         MPI_Send(&slave,j,MPI_INT,0,345,MPI_COMM_WORLD);
  113.  
  114.     }else{
  115.  
  116.         for(i=1;i<nproc;i++){
  117.             MPI_Recv(&id, 1, MPI_INT, MPI_ANY_SOURCE, 123, MPI_COMM_WORLD, &status);            
  118.             MPI_Recv(&place[id], 1, MPI_INT, id, 234, MPI_COMM_WORLD, &status);
  119.         }
  120.  
  121.         for(i=0;i<nproc;i++) {b[i]=0;}
  122.  
  123.         for(i=0;i<nproc;i++){
  124.             for(j=0;j<i;j++){
  125.                 b[i]+=place[j];
  126.             }
  127.         }
  128.  
  129.         for(i=1;i<nproc;i++){
  130.             MPI_Recv(&id, 1, MPI_INT, MPI_ANY_SOURCE, 123, MPI_COMM_WORLD, &status);
  131.             MPI_Recv(&arranged+b[id], place[id], MPI_INT, id, 345, MPI_COMM_WORLD, &status);
  132.         }
  133.  
  134.         for(i=0;i<SIZE;i++){
  135.             cout<<arranged[i]<<" ";
  136.         }
  137.     }
  138.  
  139.     MPI_Finalize();
  140. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement