Esempio n. 1
0
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;
}
Esempio n. 2
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);
}