_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");
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);
free(matrix);
return 0;
}
-
-