X-Git-Url: https://vgcfreebox.myrthtech.pt/gitweb/ue-pp-squarematrixparallelisation.git/blobdiff_plain/e267c4a95078aa382e7f7bd84374486f9dd9fc2b..da7e4dbdc340ca49d79eed18f1309a0ec27642ef:/ParallelMatrixSearch.c?ds=inline diff --git a/ParallelMatrixSearch.c b/ParallelMatrixSearch.c index 2a3c499..538af24 100644 --- a/ParallelMatrixSearch.c +++ b/ParallelMatrixSearch.c @@ -9,6 +9,23 @@ const int m_cols = m_rows; _Atomic int hv = 0; int **matrix; +typedef struct{ + int start; + int end; +} thread_args; + +void* parallel_search_cols(void *arg){ + thread_args *args = (thread_args *)arg; + for(int r = 0; r < m_rows; r++){ + for(int c = args->start; c < args->end; c++){ + if(matrix[r][c] > hv){ + hv = matrix[r][c]; + } + } + } + free(args); + return NULL; +} int main(void){ printf("1st --> Allocate memory\n"); @@ -43,17 +60,32 @@ int main(void){ t_t2 = clock() - t_t2; double t2_ttaken = ((double)t_t2)/CLOCKS_PER_SEC; printf(" %f sec\n",t2_ttaken); - printf("3rd --> Search matrix\n"); clock_t t_t3; t_t3 = clock(); - for(int r = 0; r < m_rows; r++){ - for(int c = 0; c < m_cols; c++){ - if(matrix[r][c] > hv){ - hv = matrix[r][c]; - } - } - } + + pthread_t t1; + thread_args *args = malloc(sizeof(thread_args)); + args->start = 0; + args->end = abs(m_cols/3); + pthread_create(&t1,NULL,¶llel_search_cols,args); + + pthread_t t2; + thread_args *args2 = malloc(sizeof(thread_args)); + args2->start = abs(m_cols/3); + args2->end = m_cols-(m_cols/3); + pthread_create(&t2,NULL,¶llel_search_cols,args2); + + pthread_t t3; + thread_args *args3 = malloc(sizeof(thread_args)); + args3->start = m_cols-abs((m_cols/3)); + args3->end = m_cols; + pthread_create(&t3,NULL,¶llel_search_cols,args3); + + pthread_join(t1,NULL); + pthread_join(t2,NULL); + pthread_join(t3,NULL); + t_t3 = clock() - t_t3; double t3_ttaken = ((double)t_t3)/CLOCKS_PER_SEC; printf(" %f sec\n",t3_ttaken); @@ -63,5 +95,3 @@ int main(void){ free(matrix); return 0; } - -