int main (int argc, char* argv[]) { double t_start; double t_end; double time = 0; if(argv[1] == NULL){ printf("Number of threads not specified.\n"); exit(1); } num_thread = atoi(argv[1]); GET_TIME(t_start); Lab1_loadinput(&A, &B, &n); pthread_t* thread_handles = malloc (num_thread * sizeof(pthread_t)); long i; C = malloc(n * sizeof(int*)); for (i = 0; i < n; i++){ C[i] = malloc(n * sizeof(int)); } if((n*n)%num_thread != 0){ printf("Invalid input\n"); exit(1); } if(floor(sqrt(num_thread)) - sqrt(num_thread) != 0){ printf("Invalid input\n"); exit(1); } for(i = 0; i < num_thread; i++){ pthread_create(&thread_handles[i], NULL, calculate, (void*) i); } long thread; for (thread = 0; thread < num_thread; thread++) pthread_join(thread_handles[thread], NULL); Lab1_saveoutput(C, &n, time); GET_TIME(t_end); printf("Time elapsed: %f\n", t_end - t_start); free(thread_handles); free(C); return 0; }
int main(int argc, char* argv[]) { long thread_index; int i; double start, end; check_usage(argc); number_of_threads = atoi(argv[1]); check_perfect_square(number_of_threads); pthread_t* thread_handles; thread_handles = malloc( number_of_threads * sizeof *thread_handles ); Lab1_loadinput( &matrix_a, &matrix_b, &matrix_size ); matrix_c = malloc( matrix_size * sizeof *matrix_c); for(i = 0; i < matrix_size; i++) matrix_c[i] = malloc( matrix_size * sizeof *matrix_c[i]); GET_TIME(start); for(thread_index=0; thread_index < number_of_threads; thread_index++) pthread_create( &thread_handles[thread_index], NULL, threadfunc, (void*) thread_index ); for(thread_index=0; thread_index < number_of_threads; thread_index++) pthread_join( thread_handles[thread_index], NULL ); GET_TIME(end); Lab1_saveoutput( matrix_c, &matrix_size, (end-start) ); for(i = 0; i < matrix_size; i++) { free(matrix_a[i]); free(matrix_b[i]); free(matrix_c[i]); } free(matrix_a); free(matrix_b); free(matrix_c); free(thread_handles); exit(EXIT_SUCCESS); }