diff --git a/output/serial_3000.txt b/output/serial_3000.txt new file mode 100644 index 0000000000000000000000000000000000000000..dda418aac285e72304a3dac9c5ea5a76b72a7c18 --- /dev/null +++ b/output/serial_3000.txt @@ -0,0 +1,5 @@ +0 1751211162 1280279855 572586368 +1751211162 0 470931307 1425861770 +1280279855 470931307 0 1283376996 +572586368 1425861770 1283376996 0 + diff --git a/src/djikstra_paralel b/src/djikstra_paralel index 43e73dbf217db82995522d5e69bc3a361c091e6e..ae2e98c4ff16369bb55f1ba3b0d569e1e81c4d8a 100755 Binary files a/src/djikstra_paralel and b/src/djikstra_paralel differ diff --git a/src/djikstra_paralel.c b/src/djikstra_paralel.c index ff51b431165d2893bbcc8399bb4a659a6d66e859..625f623867169756b9259119ba3fd177f1c01538 100644 --- a/src/djikstra_paralel.c +++ b/src/djikstra_paralel.c @@ -41,16 +41,16 @@ void generateRandomArray(unsigned long long **b, int node){ void printMatrix(unsigned long long **arr, int V){ FILE *fp; if(V == 100){ - fp = fopen("output/paralel_100.txt", "w+"); + fp = fopen("../output/paralel_100.txt", "w+"); } else if(V == 500){ - fp = fopen("output/paralel_500.txt", "w+"); + fp = fopen("../output/paralel_500.txt", "w+"); } else if(V == 1000){ - fp = fopen("output/paralel_1000.txt", "w+"); + fp = fopen("../output/paralel_1000.txt", "w+"); } else { - fp = fopen("output/paralel_3000.txt", "w+"); + fp = fopen("../output/paralel_3000.txt", "w+"); } for(int i = 0; i < V; i++){ @@ -172,12 +172,15 @@ int main(int argc, char** argv) { for(int j=0;j<num_of_node;j++){ listResultArray[j]=(unsigned long long*)malloc((num_of_node*process_per_host+1)*sizeof(unsigned long long)); } + + // double dijkstra_time = 0.0; + // double start_time = 0.0; + #pragma omp parallel num_threads(num_of_processors) { int world_rank = omp_get_thread_num(); - printf("%d starting\n",world_rank); - // double dijkstra_time = 0.0; + // printf("%d starting\n",world_rank); if(world_rank == 0){ // printf("world_rank = 0\n"); @@ -185,8 +188,6 @@ int main(int argc, char** argv) { } #pragma omp barrier - - // dijkstra_time -= MPI_Wtime(); // DIJKSTRA // printf("Process %d array : \n", world_rank); @@ -197,7 +198,11 @@ int main(int argc, char** argv) { tempArray = (unsigned long long *)malloc(num_of_node*sizeof(unsigned long long)); - // #pragma omp barrier + #pragma omp barrier + if(world_rank == 0){ + // start_time = omp_get_wtime(); + } + int count = 0; for (int source=process_per_host*world_rank ; source < (process_per_host*world_rank + process_per_host) ; source++){ // printf("\nprocess, rank %d %d\n", process_per_host, world_rank); @@ -213,7 +218,7 @@ int main(int argc, char** argv) { #pragma omp barrier #pragma omp critical { - printf("%d critical\n",world_rank); + // printf("%d critical\n",world_rank); for(int i=0;i<process_per_host * num_of_node + 1;i++){ // recv_data[world_rank*(1+process_per_host*num_of_node) +i] = resultArray[i]; recv_data[world_rank*(1+process_per_host*num_of_node) +i] = listResultArray[world_rank][i]; @@ -228,13 +233,13 @@ int main(int argc, char** argv) { free(tempArray); if(world_rank == 0){ - printf("\n"); - for(int i=0;i<(num_of_node*process_per_host*num_of_processors)+num_of_processors;i++){ - printf("%lld ",recv_data[i]); - if((i+1) % (num_of_node+1) == 0 && (i>0) ){ - printf("\n"); - } - } + // printf("\n"); + // for(int i=0;i<(num_of_node*process_per_host*num_of_processors)+num_of_processors;i++){ + // printf("%lld ",recv_data[i]); + // if((i+1) % (num_of_node+1) == 0 && (i>0) ){ + // printf("\n"); + // } + // } } // MPI_Gather(resultArray, process_per_host*num_of_node+1, MPI_UNSIGNED_LONG_LONG, recv_data, process_per_host*num_of_node+1, MPI_UNSIGNED_LONG_LONG, 0, MPI_COMM_WORLD); @@ -260,10 +265,10 @@ int main(int argc, char** argv) { count2++; } } - + printf("SISA\n"); int sisa_source; sisa_source = num_of_node % (process_per_host * num_of_processors); - printf("\nsisa : %d\n",sisa_source); + // printf("\nsisa : %d\n",sisa_source); if(num_of_node % num_of_processors != 0){ unsigned long long* tempArray; tempArray = (unsigned long long *)malloc((num_of_node)*sizeof(unsigned long long)); @@ -292,12 +297,13 @@ int main(int argc, char** argv) { // } // } - // MPI_Barrier(MPI_COMM_WORLD); - // dijkstra_time += MPI_Wtime(); + #pragma omp barrier + // dijkstra_time = omp_get_wtime() - start_time; // if(world_rank == 0){ // printf("Time taken %f microsecond\n", dijkstra_time) * 1000000; - printArrayTerminal(hasilAkhir, num_of_node); + // printf("Time taken %f microsecond\n", dijkstra_time * 1000000); + // printArrayTerminal(hasilAkhir, num_of_node); // } // FREE diff --git a/src/djikstra_serial b/src/djikstra_serial index 2a1527e070cbda48d5eba4532945226a9e2b6009..4498573c3e97549b390496f2491c23bdab16b7eb 100755 Binary files a/src/djikstra_serial and b/src/djikstra_serial differ diff --git a/src/djikstra_serial.c b/src/djikstra_serial.c index 0e4bec48167f8b39411e710b8b9035e80b34ae79..9ffab97217fb6b245cca66205f20018adb87a683 100644 --- a/src/djikstra_serial.c +++ b/src/djikstra_serial.c @@ -3,6 +3,7 @@ #include <stdio.h> #include <stdbool.h> #include <time.h> +#include <omp.h> int minDistance(unsigned long long dist[], bool sptSet[], int V) { @@ -92,8 +93,8 @@ int main(int argc, char** argv) int num_of_node = atoi(argv[1]); unsigned long long **arr; - unsigned long long *matrixToArrayResult; - matrixToArrayResult = (unsigned long long*) malloc ((num_of_node * num_of_node) * sizeof(unsigned long long)); + // unsigned long long *matrixToArrayResult; + // matrixToArrayResult = (unsigned long long*) malloc ((num_of_node * num_of_node) * sizeof(unsigned long long)); arr = (unsigned long long **)malloc(num_of_node*sizeof(unsigned long long*)); for(int j=0;j<num_of_node;j++){ arr[j]=(unsigned long long*)malloc(num_of_node*sizeof(unsigned long long)); @@ -109,16 +110,16 @@ int main(int argc, char** argv) resultArray[j]=(unsigned long long*)malloc(num_of_node*sizeof(unsigned long long)); } - clock_t start = clock(), diff; + double start = omp_get_wtime(); for(int i=0;i<num_of_node;i++){ dijkstra(arr, i,num_of_node,tempArray); for(int j=0;j<num_of_node;j++){ resultArray[i][j] = tempArray[j]; } } - diff = clock() - start; - int msec = diff * 1000000 / CLOCKS_PER_SEC; - printf("Time taken %d microsecond\n", msec); + double diff = omp_get_wtime() - start; + double msec = diff * 1000000; + printf("Time taken %f microsecond\n", msec); printMatrix(resultArray,num_of_node);