X-Git-Url: https://vgcfreebox.myrthtech.pt/gitweb/ue-pp-sortingalgorith.git/blobdiff_plain/d22f86e91f2e611625a9c33d822a7023b7b0eb88..c88d1765baef7e1ec0b7433147cf6185e286df4f:/parallel-sorting.c?ds=inline diff --git a/parallel-sorting.c b/parallel-sorting.c index 0ce2eb2..98200b4 100644 --- a/parallel-sorting.c +++ b/parallel-sorting.c @@ -5,7 +5,7 @@ #include -// Global variables (simulating shared memory access for simplicity) +// Global variables (simulating shared memory access) int* data = NULL; size_t data_size = 0; @@ -18,7 +18,7 @@ void merge(int low, int mid, int high) { int n1 = mid - low + 1; int n2 = high - mid; - // --- Manual Memory Allocation for Temporary Arrays --- + // Manual Memory Allocation for Temporary Arrays // We must allocate space for L and R. int* L = (int*)malloc(n1 * sizeof(int)); int* R = (int*)malloc(n2 * sizeof(int)); @@ -59,7 +59,7 @@ void merge(int low, int mid, int high) { data[k++] = R[j++]; } - // --- Crucial Step: Manual Memory Cleanup --- + // Manual Memory Cleanup free(L); free(R); } @@ -71,8 +71,7 @@ void parallel_merge_sort(int low, int high) { if (low < high) { int mid = low + (high - low) / 2; - // Use OpenMP sections to parallelize the recursive calls - // The OpenMP runtime handles the threads assignment and synchronization. + // Use OpenMP sections to parallelize the recursive calls, runtime handles the threads assignment and synchronization. #pragma omp parallel sections { #pragma omp section @@ -195,7 +194,7 @@ int main(int argc, char *argv[]) { } printf("Successfully read %zu elements from %s\n", data_size, input_file); - // Parallel Sort Data + // ------------------------------- WALL CLOCK TIME ------------------------------------ struct timespec start_sort_time; clock_gettime(CLOCK_MONOTONIC, &start_sort_time); if (data_size > 0) { @@ -205,11 +204,13 @@ int main(int argc, char *argv[]) { } struct timespec end_sort_time; clock_gettime(CLOCK_MONOTONIC, &end_sort_time); - - // Write Results + + // determine actual wall clock time double elapsed_time = (end_sort_time.tv_sec - start_sort_time.tv_sec); - elapsed_time += (end_sort_time.tv_sec - start_sort_time.tv_sec) / 1e9; + elapsed_time += (end_sort_time.tv_nsec - start_sort_time.tv_nsec) / 1e9; + // ------------------------------- END WALL CLOCK TIME --------------------------------- + if (!write_file(output_file)) { fprintf(stderr, "Failed to write output data.\n"); free(data);