From 9a9e2025b877612caa8141ab6e5ddab024e149cf Mon Sep 17 00:00:00 2001
From: 13513005 <13513005@ld5-01.if.itb.ac.id>
Date: Fri, 12 Feb 2016 16:52:39 +0700
Subject: [PATCH] bucketmpi.c done

---
 "\\"        | 119 +++++++++++++++++++++++++++++++++++++++++++
 bucket      | Bin 0 -> 13346 bytes
 bucketmpi.c | 142 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 261 insertions(+)
 create mode 100644 "\\"
 create mode 100755 bucket
 create mode 100644 bucketmpi.c

diff --git "a/\\" "b/\\"
new file mode 100644
index 0000000..7189c8a
--- /dev/null
+++ "b/\\"
@@ -0,0 +1,119 @@
+#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;
+}
diff --git a/bucket b/bucket
new file mode 100755
index 0000000000000000000000000000000000000000..95d1dfa7861a3efe33c82da020a35a48acec31ac
GIT binary patch
literal 13346
zcmeHNeQaCTb-yJ2Dch2)IEg=!noZ?QNoq!N6-Tn$hO+$ZCzp0KMQ+_T?h`Fi78{Dx
z$S226<yIY|z%0X7*qT;p-9c!F)<Cf>+mOs@-CDK<%NUG7>5|67yh3Q5gp5_>qpqX6
zYqa0FALM&aWKm!kus?i(_s%`Pd(OG%o%`{=&X=^n4!6t2RB^M9GvdZ7{2UTz#-={V
zS&22VrOeMhz}B%vKo;Wg^A@6_rs%9Rt>_Xd=K)=Sqsc9RCbyqg6um>hOi|?_QR=T)
z{IV)&<E?^Klrb*{NRND-x|6e@UA&^`Md`<-3em3g2qwLp)XPadMXRNrqU!qS+UV$%
z?VWBvIO6?8*miy{Qj(?8{+b!0x_1?4LH)d<Xrq9cqDt@2p+|oHsYUtOA^R&AmwM^H
zqG}xOk46q`ZoEGl+8B+*1`cmL+_ZV)=0;yK?%Tw#yBdy=?9M%Vxl1aJUU1|yT^`K=
zY7ZOPAO2h0f2?WyO8cPa4OikHzO&!~Y9kpnZlmLOx!8_vO9{Ij$66fQv{z=fv>g2L
zkAL-7gCooKUBC1f`|fx#`%dMX|Nd5G<Z@jPM9P**w0KLjegRlb2|QB<-vS3q$$z(u
z{IxQ;UdGObGWajb*tr+D7l*S90Vw5XOBwsmmXYr(gEs^B;&7Jx%GloxL9bI7{7X1W
z`FVF4JD&kw%~rGH-Y%Q9AA(!S*08Z!iOYH1$K}_s6Log^pD1}{M=q?Oly}-c2>BYe
zjP)+{qgE`#sMfGbHgSu;2%`1|4(`w0T>_W>Fs!4#{s=9chE2?9>)dUG!in&~NYV@^
zI(N55<FRmO@IW-o4C7#5JZ2=#V8S#EX6!m-bV#|@XfT-!Cxv=x<wz`Ivfb@%Mr*vU
z&qzj|2y^aJW~2|Md(d2LO$1|)ajs1%b%eVQu{iuR=opA4BL`#QP!Z`SqmRcE(Gb_$
z5s3w(s*6X$F^gm*CfwK=HjVy7ygQss#uG*?2rm$cezP|b4u&Wi^~85mZ8J;4qYwfR
zNyfXIn~h|5FxJER6R_38`hwADyc>-qE~C>IjKr7`4h7918V)3r0tW;$_s9E99N`!)
zg?2HvGtjoJ)!5{Fuu$9Ndq4~loy9=89aQXI)QSlr4;QCG(}k9GeC`PT_DEy}>7*n!
zur{)kw6mm+GP}NuQ`*A|w;<HV<b0%i9_@RosCiAeyyfwxF*&~oU#EmYS4%sKQCCxs
zn!Og>Lx3!G7F^w9sHxt9Qy;1{S#axp$Zx@^Z&h>)uI@$D)^5QOphDSa!L9M>vf#@K
z(v0<5@Z}b~--2U63gxf`r+b4cLl&IwX{sEv;MV<W#Dd?VghBPx%o07baQHSa(}%~+
zg}Lu>aAL_hix8@F4<sNmx531@YP}yd;(JLbKRt)C;q%1PtjSMt{s8ebr1^2qe};Gu
z@y~I-gLoRk{21qV5l=&xAL0Bq;%Uh8L!942JPlR8pYxlDry<IBasFQ7X=w88oWF~B
z8j`%9^J|Hxp~%;BzJ_=jg1ndW6~t5M^VOVp6Hg(}GtS?*6?_%(Z@)h`*YNAM^h=-9
z)4$YHSKe;#Y?~Y($Ihxxo~h?#^66!Mmisd(Uh5g5c%A$K24JtgaSTLH%~tB^*B*E8
zKX(%Lc;K(?KTS<@(^cz-2s=rfl0P%+fxMnRtDkxEA>B2lr_bvzy*~i`ACas+{4-PO
z|5EA?eeBbBdKnv7xfhzbFT#=i=NIk(<oeAy@<&g7>~IYP%yk79R_;ALji*S+&rR*m
ze*r4_Lpb$}kcmh1FVEyKy6K;M6j!gOpRWh`DfNDuPPyZRW`}!u<9U89xlw@~h7ouy
zu$TWpa?eCXQ$H8~xt^ZPT}6X1)c_E{4FH*8QXU?!8rCo~U|;77=TA=~%G~i>E0B!9
zNA)w)Zn8B;ouswrCbb+nclG{^meWV|?5bg6^^EqMp1s4Jt0UDcnM|KOb7TE`ze`W0
zJt-~c684(4+~E1#EwJ@&)yiQK)-!^nwG(6{!_wNcs$5o`Mdx?sn#!=P+H`VF=_Xhy
z-LO@=e5kC>WxJ>8j0k=q2si$l2Vrbdo1s;C^#d7g#ukJz%%n*Q2undks5fgfgRhEe
zYSvZt<b58-V1R`3|Adol%DK|RO%y%tGM|C(Jx^R(J3gshqRu9@mq{g~9Zzdlu71MV
z^K<AqQ=QSSG@pIEHltmd=T@dVb=H-xh8ga9O$ugV%%xp{5=G_jQb%8A1M7uuD(A9{
zEnSw>7uQ7tjO(g;`XS6Ej1o85?2P!Bp8cpBV9SfN@>=-hN}u@=-M4;98o4KaKQ|{r
z-pdW<22ZKTyg}E>!w*+VM`m<Vn-Y<^C?YdTkqQ5?$b5W$BX@C1xk&cN#aiX!t2gKZ
zFY*gS%%%{t(PGU0I(76S8`zT3rn2oAIX)Sd7gvPqg3azrMZ2`524UI}&I%sR3v@Y?
z+JqoHxcS$?%#Sav0*tg=qo0LAtkIE@a`l<LIV`LZJ)3Puu=VuvTIC$wQPRRW^6PJZ
z2fvP9U<32k37-d8p%*5#E9BhO#*8*$n`xMaXEC1$E5u<$cU{1`cBixnS4z8r2-<fJ
zVRfr^<xBr)n+#P?FGDzTug#X)EsjlU<J^V&GTOM)1w;j#<F5)E+F6)LY2$@WXngQr
z->s_Fj=fv;sCMFXj^y}!{1)WIMg{fv3+gEj(-Z}~9B=7jn~Va^zW_x&JG`Ajntet@
zc2yy=<l&2SDo%Qe@HTFc>l6m>Z-8O&h9<RBq;PdFtOiP3C10ggHBZUv%zLzZoU#RD
zh{l84q4=Ld1gO_$?bP7dq{c5gPrFS<JDJvIuJ${Z2h=H+!-E)z5^Wf2n(}<JC=54r
z_;6d=3O5Pi4q1aceKW4q(HZu|rV^I<URKU_^VzDu?0}6Fu0UK6JlLw8tjac$pU?Ba
zX0##e{4U0eLghlJa#5Vbo%+iYw8%cY|6Gr+YW<TGems!jt{ttt6iA0^r}gZ{Z&r9&
zAiLohh@O75b}E3zTp(@Mz8y#p*3ROYuPJcPYc1)yw)A!V%pW{$=~o*5GxyGKF{s18
zHrLYgK_LBRAbov%dah+|)nz?(&ZReB9e7jEJX(v##b|AHAQP%x9YD<+$e6Wtfy`iS
zy`GwA!o$T7x%8WJJtO?tG9?}*>Ak~RHiX!Q(1*ROqRsT0@%Urj4L#muxH}#TCA}4F
z&p_XSa3Z<IyCDRwUA&Kl!3zL}T<bhr8$t0{!203%5a`hLxw&>wiq#2FdXAd{9Rr;O
zrLsy8=6a%oxeiym)-7MWWW=?&n(#Yt)WHUQt5Bu1JY%&GAo<+2xw&eZ<CWDrDp&8S
zTK4#oA@<PPt@nPU_AatPa@%p7g57T}Mx~{)`YCtoibZ<L<N3;B^bQP#<f1tEeUyM*
zPc3?SVNaz$wK%)rtDdj9-TNv@l>GTRjxnqZdqe@=EH@)?GXggwa5DloBXBbUHzV->
zC<0yh9!AA4DQ9q^M<*&yx=aEJr*GC&=mQ*;gyioOY=K`cdG-H8eM?pUJ=Vx}^?y};
zi<XaJ{Qn(^T$2A&=^2lTYX9x~b8+HF-F_nc`IG3-LO&7yPnPJk+mCbcoB6ZSU-d0`
zHE*?lBPR&oTSUP}2rB9sZ%FE^=TUl;q;k6;EVtOtYYIOmdF6MPl%o%%R8;?XjO5p|
zPs-y_ne(zc_O|5L%66gse}7j0v7J4Af2p5CFGzY`(w|HEx}?`7T~s0DZ<F+HNjFQn
zL()%5+9T;9NuQGR8<JAzJ6l_~c<b<o_#SVg??K-t@22{OO$`n8&EC3>aLB6%O@VK0
zx`#1e@<^W<JOFAY1npHd{3i-0`k5~lH^aV`ZEYLP;6ce9j1Bk>3`Fo7I}&0(;(CM0
zUgirOiNT(rW<s<a!kbbg9<wn9+7jVtkQ8LCKWZ``|J~*@!-rAlKi7PTIR72x3-=m5
z3H<IddPC4voX{|WiA3;-&`|ZycS8);gME>1bRCC5oP4|&VG;kgn2-Lzh4F9ge_Lps
z(wtQ5p~>wBSIpB;>y(2ysrjq;51~S9L+N+A{osmu5MIs|PYa4wUTeVFs&Bge95<yw
zdVjMPr~Y;{;uSEi`d9nMs065;%0fX3`;BDT9#od$Q2NtuKRDWFIALRw(hn25_9X%?
ztn*KTr@ck#4=wa_i6Pmc+MhUxlQVvw14es;(pUSzTDjpgNk!$ql2i0Cw9{Urc(vc`
zllt{i-|4@E*%PQxOqIUc-;PQBE-9$`cV7RK4t=#>=A{0RykOF&dx%s2tH4Nv{G+1o
zFZ_=a__Z7@p2$~gNrSQKkI4OLL~h9Z8-hha{nJzQ>kj=fxgU+mpN_R^W0y9Ro-+9@
zhrYTWPRO5u4s{-DrAu@S2l=n!KZOsDRHmf<Zq5}?Dt-z%fr?dM<qdgP35iA}D5*1k
zFF5q~$^4^zQvb3;-`W2-+UaMWy1%OXzsfIi$~*as(4}V&rLUe3F3ATFr@WKD1YNp*
zrB8p_s7(Kf`u_!4ntMuL-5*u{m&)@}^HcS&=E3XGwf3+6>(8!71B#LtT#;A!RWw-j
znYT-bdIcF3q;OVxie5vDRex0Kk9viQbG)7W4TzB~b^Y{{hRSg-Cv1u8NU%)8lEdDG
z8uedaKtx69f7pSOEEPppqOSVp4f1rsD=JHrpu`<4x1-jM6yc=(9>I;ueTb&RMjYyL
zR*PojHJ0u_CogD=!#QXF(o9L>fp<-A|GYL2R(oej+{4V0_=3W7vDKIdceUw~@{0=3
z&35_4Ox<7X_!6e>8+LptQ}+WqUQu{1w&U~jqp013onP(CcKH>Byi+?qKc7n2slvYK
zw~F$*2N_{%-?KJ)kb$N4Gdo^W$OpCKw-nw_?D#6|CtX&E*FDI@QTv6p(Zg<IY9FxU
zc&m`>%Z{&RYTep#<g=BOcit7ndRoBVq2*{RbkB9+>$cN>dS7$16>O@)Z<F^)oGr8C
zEfROWXMPH}i}LR3x=<^w>mFX8AI~gs>bJ{b|5+|Se_T!iFLhnC4ol$^+|Ei?f2$w0
zV)+@WrQ$#mrR@BItJch$4{vch^T&Nw%B%YyXK|wUZ5O>wI>zyXz-tf(%5I^e_OJ%v
zJa16R%MDut?&Xs96Xh#<@igk3KT+V;JSC-d2zaUd$)mta<xhT%+nK)}pDAPidu8x{
zDT9xf!Cx(dUoV3%MF2}(Zw+v|UT1vP11}X%AMlm#Dt5`S&uk?ePbzBvQTNeZz)SV}
zD92YYN?W3m=4bqiDkDF{?PDF?-6bT!Q^}T*{|4}CtUG63>$kc5{C)MiQr?-@`u9?v
z@~Wute`%oq%yACcPG^97ZHQoADI@<D@Rjb>^Y*ddm$7rJr*u5;;`sdgOI;ax)}1hu
z=0H!6k8(wKwRRYRwnsXVM_bIcHOxMvoAPawOy$s8Aj1g7jf2tnfnd}Knejx@2o4-(
zc<t_whRtxux4GdX55jT@A)Z|;Ugwd3Y9@{_@c|$-(AReaDi+S5?*=x}0|VWUg-yy3
zCck%dwCvUlZO?W}0OnVr>NZ8>%5MMko|fHht&p;`@Z4c$><m1-ttDVQyko~BTBp(3
zvMr#IIi5h<og5I^z=dpIOK$HUOHZb65i-q|(u`$dvB<$K*eYZWm&!O63B7*5%EzTF
zTr$OzkEv23XLw%PuU(xd4%;Cz#8Z+nRz;Vc$<;<E88>>7bxeuZZ4cwZLXns;kVMim
zWlY;mT0+Oa`-qfeyG$VjDgnBUa;telvPw?2Br5X+X7aSPkgZ)Z-`kcEUF?u1B67#o
cM4_Z|HKT1Q<<vtVSDQ~1Mw!+{Lo@{c1CEa@c>n+a

literal 0
HcmV?d00001

diff --git a/bucketmpi.c b/bucketmpi.c
new file mode 100644
index 0000000..d079883
--- /dev/null
+++ b/bucketmpi.c
@@ -0,0 +1,142 @@
+#include "mpi.h"
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <time.h>
+#include <assert.h>
+
+int main(int argc, char* argv[]){
+
+	double starttime, endtime;
+	int processor_id;
+	char processor_name[MPI_MAX_PROCESSOR_NAME];
+	int namelen;
+	int num_process;
+	int t, d, i, j;
+
+	MPI_Status stat;
+	MPI_Init(NULL,NULL);
+	        
+	MPI_Comm_size(MPI_COMM_WORLD, &num_process);
+	MPI_Comm_rank(MPI_COMM_WORLD, &processor_id);
+	MPI_Get_processor_name(processor_name, &namelen);
+	unsigned int received_element;
+	srand(time(NULL));
+
+	if(processor_id == 0) {
+	    int SIZE;
+        unsigned int value;
+        
+        scanf("%d", &SIZE);
+        unsigned int *array = malloc (SIZE * sizeof(unsigned int));
+        for(i=0; i<SIZE; i++){
+        	array[i] = rand() % SIZE;
+        }
+
+        starttime = MPI_Wtime();
+        unsigned int min = array[0];
+        unsigned int max = array[0];
+
+        for(i=0; i<SIZE; i++){
+            if (array[i] < min){
+            	min = array[i];
+            }
+            if (array[i] > max){
+            	max = array[i];
+            }
+	    } 
+
+	    int *num_bucket = malloc (sizeof(int) *num_process);
+	    for(d=1; d < num_process; d++){
+	        num_bucket[d] = 0;
+	    }
+	    if (num_process != 1){
+	    	for(d=0; d < SIZE; d++){
+		        int increaseOf = max/(num_process-1);
+		        int iteration = 1;
+		        int annexed = 0;
+		        for(j=increaseOf; j<=max; j=j+increaseOf){
+		            if(array[d] <= j){
+		                num_bucket[iteration]++;
+		                annexed = 1;
+		                break;
+		            }
+		            iteration++;
+		        }
+		        if (annexed == 0){
+		            num_bucket[iteration-1]++;
+		        }
+		    }
+		    for(i=1; i<num_process; i++){
+		        MPI_Send(&num_bucket[i], 1, MPI_INT, i, 0, MPI_COMM_WORLD);
+		    }
+	        for(d=0; d < SIZE; d++){
+	            int increaseOf = max/(num_process-1);
+	            int iteration = 1;
+	            int message = 0;
+	            for (j = increaseOf; j <= max; j = j + increaseOf) {
+	                if(array[d] <= j) {
+	                    MPI_Send(&array[d], 1, MPI_UNSIGNED, iteration, 1, MPI_COMM_WORLD);
+	                    message = 1;
+	                    break;
+	                }
+	                iteration++;
+	         	}
+	            if (message == 0)
+	                MPI_Send(&array[d], 1, MPI_UNSIGNED, iteration-1, 1, MPI_COMM_WORLD);
+	        }
+
+	        int lastIndex = 0;
+	        int current_index = 0;
+	        for(i=1; i<num_process; i++){
+	            unsigned int * recvArray = malloc(sizeof(unsigned int)*num_bucket[i]);
+	            MPI_Recv(&recvArray[0], num_bucket[i], MPI_UNSIGNED, i, 2, MPI_COMM_WORLD, &stat);
+	            if(lastIndex == 0){
+	                lastIndex = num_bucket[i];
+	            }
+	            for(j=0; j<num_bucket[i]; j++){             
+	            	array[current_index] = recvArray[j];
+	                current_index++;
+	            }
+	       	}
+	    }
+	    
+        endtime   = MPI_Wtime();
+
+        int c;
+        for(c=0; c<SIZE; c++){
+        	printf("%d, ", array[c]);
+        }
+
+        printf("\nIt took %f seconds \n", endtime-starttime);
+        printf("Numbers: %d \n", SIZE);
+        printf("Processes:  %d \n", num_process);
+
+    } else {
+        int element_used;
+        MPI_Recv(&element_used, 1, MPI_INT, 0, 0, MPI_COMM_WORLD, &stat);
+        unsigned int *localArray = malloc(sizeof(unsigned int)*element_used);
+        int li;
+        for(li = 0; li<element_used; li++){
+            MPI_Recv(&received_element, 1, MPI_UNSIGNED, 0, 1, MPI_COMM_WORLD, &stat);
+            localArray[li] = received_element;      
+        }  
+
+        int c;
+        for (c = 1 ; c <= element_used-1; c++) {
+		 	d = c;
+		 
+		    while ( d > 0 && localArray[d] < localArray[d-1]) {
+		      	t          = localArray[d];
+		      	localArray[d]   = localArray[d-1];
+		      	localArray[d-1] = t;
+		 
+		      	d--;
+		    }
+		}
+        MPI_Send(localArray, element_used, MPI_UNSIGNED, 0, 2, MPI_COMM_WORLD);
+    }
+	 
+	MPI_Finalize();
+	return 0;
+}
-- 
GitLab