From 4363943c046262f1e5f00f955c2ab71cc3779002 Mon Sep 17 00:00:00 2001 From: Ft-N <ftnfata@gmail.com> Date: Thu, 27 Feb 2020 10:41:08 +0700 Subject: [PATCH] (almost) done --- src/mp.c | 123 +++++------------- src/omp_hello | Bin 9240 -> 0 bytes src/omp_hello.c | 21 --- src/omp_hello.dSYM/Contents/Info.plist | 20 --- .../Contents/Resources/DWARF/omp_hello | Bin 9902 -> 0 bytes 5 files changed, 33 insertions(+), 131 deletions(-) delete mode 100755 src/omp_hello delete mode 100644 src/omp_hello.c delete mode 100644 src/omp_hello.dSYM/Contents/Info.plist delete mode 100644 src/omp_hello.dSYM/Contents/Resources/DWARF/omp_hello diff --git a/src/mp.c b/src/mp.c index 8a642f2..0623060 100644 --- a/src/mp.c +++ b/src/mp.c @@ -1,4 +1,3 @@ -#include "mpi.h" #include <stdio.h> #include <stdbool.h> #include <stdlib.h> @@ -9,30 +8,30 @@ int N = 0; -int getmin_index(long **graph, bool pickedVertices[N], int sourceVertex) { +int getmin_index(long *graph, bool pickedVertices[N], int sourceVertex) { int minDistance = INT_MAX; int min_index = -1; for (int j = 0; j < N; j++) { - if (!pickedVertices[j] && graph[sourceVertex][j] <= minDistance) { - minDistance = graph[sourceVertex][j]; + if (!pickedVertices[j] && graph[sourceVertex*N+j] <= minDistance) { + minDistance = graph[sourceVertex*N+j]; min_index = j; } } return min_index; } -void print(long **graph){ +void print(long *graph){ printf("Matrix: \n"); for (int i = 0; i < N; i++) { for (int j = 0; j < N; j++) { - printf("%ld ", graph[i][j]); + printf("%ld ", graph[i*N+j]); } printf("\n"); } } -void dijkstra(long** graph, int sourceVertex) { +void dijkstra(long* graph, int sourceVertex) { // Distance from single source to all of the nodes bool pickedVertices[N]; @@ -51,43 +50,40 @@ void dijkstra(long** graph, int sourceVertex) { // Update distance value for (int vertex = 0; vertex < N; vertex++) { if ((!pickedVertices[vertex]) && - (graph[min_index][vertex]) && - (graph[sourceVertex][min_index] != INT_MAX) && - (graph[sourceVertex][min_index] + graph[min_index][vertex] < graph[sourceVertex][vertex])) { + (graph[min_index*N+vertex]) && + (graph[sourceVertex*N+min_index] != INT_MAX) && + (graph[sourceVertex*N+min_index] + graph[min_index*N+vertex] < graph[sourceVertex*N+vertex])) { - graph[sourceVertex][vertex] = graph[sourceVertex][min_index] + graph[min_index][vertex]; + graph[sourceVertex*N+vertex] = graph[sourceVertex*N+min_index] + graph[min_index*N+vertex]; } } } return; } + int main(int argc, char *argv[]) { - + // Get matrix size from argument vector in , convert to int int thread_count = strtol(argv[1], NULL, 10); - N = strtol(argv[2], NULL, 10) + N = strtol(argv[2], NULL, 10); - long** graph; - graph = (long**) malloc(sizeof(long*) * N); - for (int i = 0; i < N; ++i) - { - graph[i] = (long*) malloc(sizeof(long) * N); - } + long* graph; + graph = (long*) malloc(sizeof(long) * N*N); srand(13517115); - // Fill the matrix with rand() function + // Fill the matrix with rand() function for (int i = 0; i < N; i++) { for (int j = 0; j < N; j++) { - graph[i][j] = rand(); + graph[i*N+j] = rand(); } } // Assign with infinity for (int i = 0; i < N; i++) { for (int j = 0; j < N; j++) { - if (!(i == j || graph[i][j])){ - graph[i][j] = INT_MAX; + if (!(i == j || graph[i*N+j])){ + graph[i*N+j] = INT_MAX; } } } @@ -95,80 +91,27 @@ int main(int argc, char *argv[]) { for (int i = 0; i < N; i++) { for (int j = 0; j < N; j++) { if (i == j){ - graph[i][j] = 0; + graph[i*N+j] = 0; } } } - // Calculate start time - clock_t tStart = clock(); - - #pragma omp parallel num_threads (thread_count) { - - } + printf("start\n"); - int numtasks, rank, dest, source, rc, count, tag=1; - double start_time, end_time, total_time; - - - int jobs = N/(numtasks-1); - long* dataRecv; - int destinationRank = 0; - count = 0; - if (!rank){ - dataRecv = (long*) malloc(sizeof(long) * N*jobs); - while ( count < numtasks-1 ){ - MPI_Recv(dataRecv, N*jobs, MPI_LONG, MPI_ANY_SOURCE, tag, MPI_COMM_WORLD, &Stat); - printf("Received from process %d ", Stat.MPI_SOURCE); - for (int i = 0; i < jobs; ++i) { - for (int j = 0; j < N; ++j) { - graph[Stat.MPI_SOURCE * jobs - jobs + i][j] = dataRecv[i * N + j]; - } - } - count++; - } - free(dataRecv); - } - else{ - long *dataSend = (long*) malloc(sizeof(long*) * N * jobs); - int count = 0; - for (int i = rank*jobs-jobs; i < rank*jobs; ++i) - { - dijkstra(graph, i); - for (int j = 0; j < N; j++) { - dataSend[count * N + j] = graph[i][j]; - } - count++; - // printf("Print job %d from rank %d\n", i, rank); - } - MPI_Send(dataSend, N*jobs, MPI_LONG, destinationRank, tag, MPI_COMM_WORLD); - free(dataSend); - } - - MPI_Barrier(MPI_COMM_WORLD); - end_time = MPI_Wtime(); - total_time = end_time - start_time; - - if (rank == 0) { - printf("%f µs\n", total_time*100000); - // Write to file - FILE *f = fopen("output.txt", "w"); - for (int i = 0; i < N; i++) { - for (int j = 0; j < N; j++) { - fprintf(f, "%ld ", graph[i][j]); - } - fprintf(f, "\n"); - } - fclose(f); - } - - for (int i = 0; i < N; ++i) + // Calculate start time + double start = omp_get_wtime(); + int idx; + #pragma omp parallel for num_threads (thread_count) + for (idx = 0; idx < N; ++idx) { - free(graph[i]); + dijkstra(graph, idx); } - free(graph); - MPI_Finalize(); + double end = omp_get_wtime(); + double total = end - start; + printf("%f µs\n", total*100000); + printf("end\n"); + free(graph); return 0; -} \ No newline at end of file +} diff --git a/src/omp_hello b/src/omp_hello deleted file mode 100755 index 760831ee5f7157e95db478d660fb7269cf89ce15..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9240 zcmeHNTWnNC7@ln_RBX$Fh(#eeL2Bxyd)jg<511{ou+<7k3lbE@vuDqCSI%BI=d`pY zBq+hSDUE#~#21Z;J{n`94_*>NBvE-VUg85W#t?&Mn;_4PA=K}mGt-_uv_5Nc{`8;u zzxgjS^Uq9kI@9m}{_D<i#$t_(ooQf<tpfMm!`L~dL1JtjI1T3fK>yy<(bU2H)LKum zdblW}IM-mv`EcsUaJ`A}kJq;`i7_^Y;Rq%R&OK|~Bgv<5yp}dh2C5IFo^TyCu`@x; zx$BK)-1(+(ypLtPP0~VP<<KnSEt3s?Jf64gishg!9PeitZ&2D3ro7M7UE?!d&nc8f zq(L~Iw$h)kCiR4aR2Lfx&aFJpIY!a)t-|q=GTvnwgfRBTl0@rT19QH+f4DzjhV`pk zSGB%@b)~p!e4LkT?oJdlWt&$#XUTXf4DFBLxG4W>4QLdc+s41ei^HGB*G<MC!ohg7 z@0x|iFBZ<h;K06TQ@aP$9@awh1SV>4@@tAC^58?Z5$8<wsrm7nQMXGSRT}U(>bFt% zp{D$h{u=PZs4pYH5d^#s@&ParompZU{~9p$xfHz#|L~C@TWZt5Ent1rb#%Ls(X$hF z7MO_org2>8-Foe<r=Mb<v>M4@-u>u3Iu}SCW34L$KdvyffjTi?@(Z6s>W6->kdEf) zmkqM-vT4|Qx#H;~rYS~3^$wCo%Ed~eCxMX_GUP>Z`oJnqQ|}FAKDICi*bPm%o>ffj zTJZAyk^w(|m6V_8pE9t}uW52O(D9@2rFs9L`Rn+Y#I#NkMHz@P5M?0BK$L+f15pP4 zFBv$LuKtledsC~PzL~C$UQbV^uBXplZcb0KFYs~4F3~*F)o*GSQCCy9(^ETtgH(GB z#boOC=criqE8l8rXA-Ek55;F-cJ+!39<S{Igm;a;+N!D9$wRYnu6~VZ7tkWCYxrtp z(+fW7>gn0qmveJ-SFg-<9L3k~T*phIJTA(YMVS$07Ukg7hAve7LvtM)P*3L(jm`WC z|NH|a{YnyjgwOm$(laD|OVSaNE|El^y)&PZROn%8%eKo}&M6l)FYj1JR_n-W<s8Zt z;(HsmEcWU_78{Sp;w{UYr_t#aw5<n!cn3j1$H<7N2};%$f1{y^KG$29HBqN<LP<n^ z!{8sKA7Mdv`RQn`_dAc4@1)=TzSkoC(U<;$pE6VR4X9~^w`4sl>jwFEVT-KS%3AqF zb(Dc915pN|3`7}-G7x1T%0QHXC<9Rjq6|bCh%)fs&A_US@xwH_)k%8n6OZ9MQz&Ke zc>TP?rkN98mE?Q(KX-sv49Bo-%cjP5G~ywSk60crjTX6oE#i_&3#j~NvLH?8>Ljn= zDcj2t>LxVm37<a5c;)uW6kJk_<ITU37xUa2x6Dz`!kfB5!|E&=g%W#GT*|N>dOK`n z=hvf{q5GEe>yL>mlh+}uw@ZrndkEhG&Nar^`{xcHCq3PHBv7dTA9w=trT`{Ay>+U4 z9K!oh1Tpy+<b6pGWb#)SqVQMuIfThSh{^vQ>E8#L{1t{M{MEe<Ve${+EHz3>Lv8~r zf6CKJU^Sk51r{&2V(uHHUd{gzV3^~_r`{0W8^SO8n7R>UqJ;B2E`;#O5MBdJmvd{u z4}#ml>%b3zLCK}`8sq*>;EQY(F1AW&`!2e1=NkiCR&7>)o2m_Z*D=u#xt8PVR`!(P zWDVOIH|X@dVoVtNZp%I4l`Hzd@UE_bl4m(3!|v)gy~0?*D_E{RWECwuO*?#>KCowV z@8<5Vp#ot%eOsksMRy%jXLQc+?<96PVKRNpaP(Z+MhC9GeVgu8PMyqdIk98w$aa%g vGF!6~`R?swC9@keQqqTY-86gM{_z)%Cdy1^L#B&TlMvI+l@i^)GJyX9gp=wE diff --git a/src/omp_hello.c b/src/omp_hello.c deleted file mode 100644 index c2f9454..0000000 --- a/src/omp_hello.c +++ /dev/null @@ -1,21 +0,0 @@ -#include <stdio.h> -#include <stdlib.h> -#include <omp.h> - -void Hello(void); /* Thread function */ - -int main(int argc, char *argv[]) { - int thread_count = strtol(argv[1], NULL, 10); - printf("hi1\n"); - #pragma omp parallel num_threads(thread_count) - Hello(); - - return 0; -} - -void Hello(void) { - int my_rank = omp_get_thread_num(); - int thread_count = omp_get_num_threads(); - - printf("Hello from thread %d of %d\n", my_rank, thread_count); -} \ No newline at end of file diff --git a/src/omp_hello.dSYM/Contents/Info.plist b/src/omp_hello.dSYM/Contents/Info.plist deleted file mode 100644 index ae70f05..0000000 --- a/src/omp_hello.dSYM/Contents/Info.plist +++ /dev/null @@ -1,20 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> -<plist version="1.0"> - <dict> - <key>CFBundleDevelopmentRegion</key> - <string>English</string> - <key>CFBundleIdentifier</key> - <string>com.apple.xcode.dsym.omp_hello</string> - <key>CFBundleInfoDictionaryVersion</key> - <string>6.0</string> - <key>CFBundlePackageType</key> - <string>dSYM</string> - <key>CFBundleSignature</key> - <string>????</string> - <key>CFBundleShortVersionString</key> - <string>1.0</string> - <key>CFBundleVersion</key> - <string>1</string> - </dict> -</plist> diff --git a/src/omp_hello.dSYM/Contents/Resources/DWARF/omp_hello b/src/omp_hello.dSYM/Contents/Resources/DWARF/omp_hello deleted file mode 100644 index 2610f74a9ebd17b990b29944e12ff394c91893a1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9902 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 -- GitLab