From e28653d51d18c48808d182bfeff12089d2f04650 Mon Sep 17 00:00:00 2001
From: 13518104 Kevin Austin Stefano <13518104@std.stei.itb.ac.id>
Date: Sat, 6 Mar 2021 22:35:32 +0700
Subject: [PATCH] openmpi done

---
 output_mp/test_5  |   4 ----
 src/MST_OpenMPI   | Bin 17760 -> 17800 bytes
 src/MST_OpenMPI.c |  19 ++++++++++++++-----
 3 files changed, 14 insertions(+), 9 deletions(-)
 delete mode 100644 output_mp/test_5

diff --git a/output_mp/test_5 b/output_mp/test_5
deleted file mode 100644
index 2734eef..0000000
--- a/output_mp/test_5
+++ /dev/null
@@ -1,4 +0,0 @@
-5
-0-1
-1-3
-2-4
diff --git a/src/MST_OpenMPI b/src/MST_OpenMPI
index b8d21e740d2d76f6fb897fba1617500d62afcc5c..9b36ae4f53fc8cb0ec5d40c676a0c760c6c3a556 100755
GIT binary patch
delta 2227
zcmZuy4N%i%7=Pc5EhcVkWAJATwm}%6@+H$jDe@O~{prjw!8BN=fahIyfZ~}Sop_$b
zSTpcBJ@TT{>#{7mv}q!jF_O}#JF(1<^9!!)nuQ2x2$%Zr`G2fTd++xA-uL-_pXd3%
z>u;isUfP^Wxt6pKHGxDTu0YGhuEaose0T_ZBsS@RWAu9y`(m_8n_Su3w|naF;RU7@
zF;S<T{#Hd$LF@fnRoQBNr-2a8r!5p=PL|I9b%a`B>4+qxLvR%Ayvy^P*A?^@gn7Q@
zd~-g9U$k3j9#rZ!(I4QNZZ2*1+alcxXfVXaGd#~<@1laoXM^6dKJU7-XnTS4oD6P;
z!-j<>i``Dx4pbnXZq74W<T)2y1!iM1y#@Kk*{1!rN5lX-jB`zk9u@3`0b>eH1x?iK
z^h?%9>`vXmytnn}n=yg$DlR8%N-9RJR|T)Zny93NctPxO4Rb!%Wlp@9ep2Yl0XP&j
zllH=IQO<}~O^C}un&||sf*Ym;y5AoWU8;a|CSFq#CIrChKnYV3Q8K~vUe{&3Zx|e9
zo{3Jq$MYUnzqf2$sG;YaPze*n#Fo-|@Jeh>$@BMlzH>4rCI}Xeily%G60UL>^#j<K
z$_Ev){zpOoph6_H$5t?ouu#t7BRqf7br=1UKb8R1nIOkJWAasHNdCz%)R|{zv<+im
z-}Y75J*gIhjGY9JO5D}|aL)<ckzu%Gj;CrEH}BGR>Ctni;GVm42lm7z(FJfkZkl>J
z4oxrthT@X6#o{!$8iWhRLW0Gn_<0oaEwTF27(4k2ee+!c3C@I-DEnXt-n2}kjo`N=
z$Ndx?>Z)M;%@AgX4fSk)jfY9`>092tEtIRQ!F!|@9e914kz&;v=lisE|FJxA1Dk+W
zl34IX(O2*-B;t&7UiT@SkoeGqR0@%N)fdXy3f9fO#4dB6h_n?D_62rvvFAKn#+J_a
zO^LDT?WBzJrN<yHVm<eYJ!A9Je&x0ehI8Hbl))6xCG6ZnEy|~a50b&(!9kwaV>S9P
zom|9z#D3)ej^Rr1y!$54*CLJ}HY1+I`X5BRir9x(gUuX9yopnwR}fNri|4Zt{ePl8
zVg`<MEn*vDGopQ*f0{pxn=Bm4vxrrQw-I+Ens5es5gmwCfAM@Nq652Dk63_}+KYG)
zF^EVAth6R6#s{Ivnn7FPm^Fnq!+@2cJ7L0VqgF86Y;-B)A&rEkNY$_b>3Vnv>3KM2
zvnA$Y@`V_iusZ!4ibAbgnXj1qSU8DCRs~+F941ir3ozSlR0VnV$MH*Z<GvJLN4g5y
zkZ#1i<%t6HvSW<r_n_6k-geQDx0g{KJ`Pvyahe9)c8v3UIMBpc{g@b#6rou=3R)p8
zu}~${BjB$~Tpt0c=^Q?ab?I}%XgwUtW@rP_Xr+M!U;s~z{)z0*DE$%+<YdwST+FGV
z8Bpwa&QL2q!01U_GvI*3M*HDAN2X!1(0E)93CI!{aWK>khh{R_;b>qaI+BG?udu}O
zAZFvmj3koO%YH>6lGV_nV(11~sAQ;5r0pU-B6>R`TItAQt)yQrn_WS^f#^wt><!-r
zaSe*L_rWlWQ5i84JDj0WbULuJ7<}FLAuWMAq^rgKMuD1}<cyo-TZt_|Z@b_OO50Fs
zP%uQFWtT$8^nhTy+%HSRACd-SpG3~DTDIzw`9mg&Q6uxO$oyop#ORax*Tp<XMXG`k
zCqtv4+sT-1IKV=c-_uEoEwcVpK?m%)Y8Z1G&5LBM;TTCA>Q}j-rCBFSlVNFYO7T|t
zv^Gl8-6RYmuD6kIAhE<g!!DkQT7vgweRs5U-X;P0NX+tc7|3PJ$7P+5h5rIv?Glhv
zV8~<4r)BAF`Oe{Z7FMsH&09euDr;V?UB0GzSylB~|Gp=?lzw-9rIP*#-E5{NG(`0<
z!8#40AqZgsu=6qv0lD-c?18PwZL~^3LYV9Cp2t&~1>HqXO>LeeJPXw2)D+E;PWNGJ
GzU^-qIkEr%

delta 2181
zcmZWr3rtg27(S<^D1(-kg15CmTZ92o9t|Mid|jk+S#atAryD2^G`RSjZ0f{;@))Id
z;Ql?_bS^P&KH?_Wn4m+QO4P+{VTnVT8Zl~C5?}ZN=k)GB_g>g0C+Yv)^Zoz%U*`c0
zZramGo8zc$OZ@JDYCDle^_K4A_Wcp^<V9?kY0?gd>ABGI2Wb<c`JjqB86PkHrD0F@
zh!1Oj_ik1BRJ6dmQRDE}e`O#<@My<KFzJ}qdos{pW!V}`NE>tHJMy<E3T~&*J=M>3
zTJTKrz;$gEHAAUxJ>3sibyMg{uQj+><yYhEpipTrg&Rdt>^)AI+ZjH0VW<1O^XTBB
z;5y@53oVA(p`6V|_%<{kt`mamezvR2R|a7r(SCQIiz57LNQPx00iips!>pR1F=R^U
z%;Adda3v&`MuWyUG2uewuyq~%SVK*Rz8UivC=*irV&X7(g~oRYmK&oYOib-^-V;2|
z%Yszot$@Mu+u?g-8a)lyjp>0ELu@w0gr1@$&>I>-cX~&J6{w(zn-N(3L=@f5%UEaz
z{K>r<R`g61UCthN;Q;HPtBbWjfa#_J`aWzkrReIh-XlSn3R7%^NOMtOz29Ku51`Kc
zdQkGvJfaV-n<pj)_hGW0x^ir?oa=m(jrihacIgl+Ft)T0W{eJ}mGI8!&$Ng280ZN8
zh|u2$L6#``6C_#2`Y*=~_BBC?B})6Lv}w+2mQEuyS*)s@2hd_M=}(Wckz?pvJkEq~
zH(W#=cNd;m#?rqaCOkUDi5Bvnvc>6l<%YZJ)}p<;j^!mab_Yg~&sFUmC=E}jdi3yr
z`Z+`TiFeS2yRh1QXeD#usYHogY{>IyTf_bvOO1xZ;^>C_JiINhV`;^qsn3f-N<nZJ
zpM@*oL3xcVlxNY!xA-Eyn4ixtC_c3~G1ywmdPSP~H~2ZZt_yr2Uy$dC8LzjILcx>3
zFrRll%XK}@i@zz<+!`sIc&7H{Kw`uvRkPk*QMzdLYFkX%ON3g~udr~V@Yium6#X!>
z8<^8LM3&om<ey^#**M>aZ7W06+!MuG#7l^~5bq;)AlBe6-#}D9KtC!%Y7wIm&ppER
zh|}>Pm#Ih&IfNgzNMsC%;vPf+59V3KN<<&x4~Qexg!n%d#W=(+L;*1sn_Pjo3$a}d
z^^s93({0!nnMm89J2IBG0JU=TAegOIIvFxiu7i0flVBanm*Gp4U%+9M{m^Z-+UH`z
zIT(-dI(@xrn$};Pr3xA`l7u5wgoRXr*=D7GKqks~m}eV98(;%|uZ6EsZib^aYt)X%
zqBs|A|Mihi2YpOM-(CF>X&)U>f}izRZa(mKlb%;I6OxU~Hlv~qme{9h&f`~)x7EHT
z5IXHsAud6{M{rfb6hB%3tqu<FbE_jvZ6N#M8qUhSPaFp*UY@-vN%+!rr>vlM$W5JT
zn58_t=uH|ius798Z@|x~NrsPfGRG;pSzu4&98WR*5TYZ=_{g#$wFJ>2@xi1(@hB-#
zEPyQ<jxL4SYK~S*@*7F+Vcuv5TubB3ow(LO^rS>ti|>Rqt};t=pAzu^yYx6V%0M*0
zkLS!*OkGbf$7Gwr%P<aBjpsDeP#XomQ6pWz=5!g8jt$7N8s1b&lePqxH7I-%{>5OU
z8Y8pO3^bji+a(X*fg_#E^(vM<Z1-_2l7XC3`1_$Uu|nZH75<<}COQ@VvgGroBnOx@
z`{R+-6BE(DP)`W-VGa>+0%azXV9W3~>c~TO8F8e_Kwe|IfO7Q0DvX0w8L?(|4cKgr
zQ8rqy)U^p(GdT0-igsa`tgTTzZDXFy-zwTxtxR_*+7>Wma*iKS%ewz!wkMTUo6NF#
zKF--V>YbPQHuavJa8&JWm|UX9``61S1q>dV0<dSL8wQWTAm+i6tR%y*{|#U-vgMJo
f<3Tied$UAJP0*X29xyjkR-S=)XF9dQLTBth%nG8D

diff --git a/src/MST_OpenMPI.c b/src/MST_OpenMPI.c
index 389281e..747b792 100644
--- a/src/MST_OpenMPI.c
+++ b/src/MST_OpenMPI.c
@@ -131,11 +131,12 @@ void QuickSort(Edge T[], int i, int j, int rank, int max_rank, int rank_index){
     makeStruct(&mpi_edge_type);
         
     int distributed_process = rank + pow2(rank_index);
-    rank_index++;
+    // rank_index++;
 
     // If the rank of distributed process is higher than max rank
     if (distributed_process >= max_rank) {
         SequentialQuickSort(T, i, j);
+        // MPI_Send(&T, j - i+1, mpi_edge_type, distributed_process, 1, MPI_COMM_WORLD);
     }
     else {
         int pivot;
@@ -252,7 +253,12 @@ int compare_src(const void *a, const void *b)
     Edge *b1 = (Edge *)b;
     return a1->src > b1->src;
 }
-
+int compare_dest(const void *a, const void *b)
+{
+    Edge *a1 = (Edge *)a;
+    Edge *b1 = (Edge *)b;
+    return a1->dest > b1->dest;
+}
 
 // Minimum Spanning Tree using Kruskal's Algorithm
 void KruskalMST(Graph *graph, Edge result[], int *e, int size, int rank)
@@ -283,6 +289,8 @@ void KruskalMST(Graph *graph, Edge result[], int *e, int size, int rank)
     // QuickSortSrc(graph->edge, 0, graph->E, size, rank);
     // QuickSortSrc(result, 1, (*e));
     qsort(result, *e, sizeof(result[0]), compare_src);
+    qsort(result, *e, sizeof(result[0]), compare_dest);
+    qsort(result, *e, sizeof(result[0]), compare_src);
     return;
 }
 
@@ -347,16 +355,17 @@ int main()
 
         // Declare the array buffer to receive data from the source process
         Edge* temp = (Edge *) malloc (sizeof(Edge) *arrLength);
+
         source = MPI_Recv(temp, arrLength, mpi_edge_type, src, 1, MPI_COMM_WORLD, MPI_STATUS_IGNORE);
-        printf("Process %d\n", rank);
+        // printf("Process %d\n", rank);
         // Sort the received buffer with QuickSort
         QuickSort(temp, 1, arrLength, rank, size, idxcnt);
-        printf("Process %d\n", rank);
+        // printf("Process %d\n", rank);
         // Send the sorted array back to the source process
         source = MPI_Send(temp, arrLength, mpi_edge_type, src, 1, MPI_COMM_WORLD);
         
         // source = MPI_Send(temp, arrLength, mpi_edge_type, src, 1, MPI_COMM_WORLD);
-        printf("Process %d\n", rank);
+        // printf("Process %d\n", rank);
         free(temp);
     }
     MPI_Finalize();
-- 
GitLab