X-Git-Url: https://vgcfreebox.myrthtech.pt/gitweb/ue-pp-squarematrixparallelisation.git/blobdiff_plain/b52cdfd688d05c7b04d99c3e802cb4d261b41351..b0e2518d9987a533cb5c7dd24d8de46f5f506186:/ParallelMatrixSearch.c diff --git a/ParallelMatrixSearch.c b/ParallelMatrixSearch.c index f56fa2e..949f073 100644 --- a/ParallelMatrixSearch.c +++ b/ParallelMatrixSearch.c @@ -23,13 +23,10 @@ void* parallel_search_cols(void *arg){ } } } - free(args); return NULL; } -// Function to dynamically create threads and divide columns void run_parallel_search(int num_threads) { - // 1. Dynamically allocate arrays for threads and their arguments pthread_t *threads = malloc(num_threads * sizeof(pthread_t)); thread_args *args = malloc(num_threads * sizeof(thread_args)); @@ -38,41 +35,26 @@ void run_parallel_search(int num_threads) { exit(1); } - // 2. Calculate the base number of columns each thread will process int chunk_size = m_cols / num_threads; - // 3. Create the threads in a loop for (int i = 0; i < num_threads; i++) { args[i].start = i * chunk_size; - - // If it is the last thread, let it process all remaining columns if (i == num_threads - 1) { args[i].end = m_cols; } else { args[i].end = (i + 1) * chunk_size; } - - // Pass the address of the specific struct for this thread if (pthread_create(&threads[i], NULL, ¶llel_search_cols, &args[i]) != 0) { perror("Failed to create thread"); exit(1); } } - // 4. Wait for all threads to finish for (int i = 0; i < num_threads; i++) { pthread_join(threads[i], NULL); } - - // 5. Clean up the dynamically allocated arrays free(threads); - // Note: Do not free(args) here IF your thread function (parallel_search_cols) - // is already calling free(arg) internally! - // Since your original thread function calls free(args), calling it here - // would cause a "double free" crash. - // However, since we allocated it as one big array, it is better to remove - // free(args) from your thread function and do it here: - free(args); + free(args); } int main(void){ @@ -111,7 +93,7 @@ int main(void){ printf("3rd --> Search matrix\n"); clock_t t_t3; t_t3 = clock(); - int threads_to_use = 4; + int threads_to_use = 800; run_parallel_search(threads_to_use); t_t3 = clock() - t_t3; double t3_ttaken = ((double)t_t3)/CLOCKS_PER_SEC;