X-Git-Url: https://vgcfreebox.myrthtech.pt/gitweb/ue-pp-sortingalgorith.git/blobdiff_plain/8d38f9952f14d98d5bb76b323403f9fef9bfd8fc..d22f86e91f2e611625a9c33d822a7023b7b0eb88:/parallel-sorting.c?ds=sidebyside diff --git a/parallel-sorting.c b/parallel-sorting.c index 1b6aff4..0ce2eb2 100644 --- a/parallel-sorting.c +++ b/parallel-sorting.c @@ -2,6 +2,8 @@ #include #include #include +#include + // Global variables (simulating shared memory access for simplicity) int* data = NULL; @@ -156,7 +158,7 @@ int write_file(const char* filename) { int main(int argc, char *argv[]) { - // --- 1. Handle Command Line Arguments --- + // Handle Command Line Arguments int thread_count = -1; char *input_file = NULL; char *output_file = NULL; @@ -179,12 +181,12 @@ int main(int argc, char *argv[]) { return EXIT_FAILURE; } - // --- 2. Setup OpenMP Threads --- + // Setup OpenMP Threads --- omp_set_num_threads(thread_count); printf("--- Starting Sort Process ---\n"); printf("Threads allocated by OpenMP: %d\n", omp_get_max_threads()); - // --- 3. Read Data --- + // Read Data if (!read_file(input_file)) { fprintf(stderr, "Failed to read data.\n"); // Clean up data memory before exit @@ -193,22 +195,30 @@ int main(int argc, char *argv[]) { } printf("Successfully read %zu elements from %s\n", data_size, input_file); - // --- 4. Sort Data --- + // Parallel Sort Data + struct timespec start_sort_time; + clock_gettime(CLOCK_MONOTONIC, &start_sort_time); if (data_size > 0) { // Execute the parallel sort parallel_merge_sort(0, data_size - 1); printf("Sorting completed successfully.\n"); } + struct timespec end_sort_time; + clock_gettime(CLOCK_MONOTONIC, &end_sort_time); + + // Write Results + 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; - // --- 5. Write Results --- if (!write_file(output_file)) { fprintf(stderr, "Failed to write output data.\n"); free(data); return EXIT_FAILURE; } printf("Sorted data written successfully to %s\n", output_file); + printf("Total Elapsed Wall-Clock Time: %lf seconds\n", elapsed_time); - // --- 6. Cleanup --- + // Cleanup free(data); return EXIT_SUCCESS; }