Ejemplo n.º 1
0
int main()
{
	uthread_arg_t *uarg;
	int inx, i ,j;


	gtthread_app_init();

	init_matrices();
//	print_matrix(&A);
//	print_matrix(&B);
//	print_matrix(&C);
	gettimeofday(&tv1,NULL);
	j = 0;
	for (i=0; i<4; ++i) 
	{
		for(inx=0; inx<NUM_THREADS; inx++)
		{
			uarg = &uargs[inx];
			uarg->_A = &A[i];
			uarg->_B = &B[i];
			uarg->_C = &C[i];

			uarg->tid = inx;

			uarg->gid = i;  // Every matrix in a different group
                        uarg->matrix_size = sizes[i];

			uarg->start_row = (inx * sizes[i]/NUM_THREADS);
#ifdef GT_GROUP_SPLIT
		/* Wanted to split the columns by groups !!! */
			uarg->start_col = (uarg->gid * PER_GROUP_COLS);
#endif

			uthread_create(&utids[j], uthread_mulmat, uarg, uarg->gid);
			j++;
		}
	}
//	for(i=0; i < 100000; ++i) {
//		for(j=0; j<9000; ++j) {
//
//              }
//        }

	gtthread_app_exit();

//	print_matrix(&A);
//	print_matrix(&B);
//	print_matrix(&C);
	// fprintf(stderr, "********************************");
	return(0);
}
Ejemplo n.º 2
0
int main()
{
	uthread_struct_t *uthread;
	uthread_t u_tid;
	uthread_arg_t *uarg;

	int inx;

	gtthread_app_init();

	for(inx=0; inx<NUM_THREADS; inx++)
	{
		uarg = (uthread_arg_t *)MALLOC_SAFE(sizeof(uthread_arg_t));
		uarg->num2 = (inx % MAX_UTHREAD_GROUPS);
		uarg->num3 = 0x55;
		uarg->num4 = 0x77;
		uthread_create(&u_tid, func, uarg, (inx % MAX_UTHREAD_GROUPS));
		uarg->num1 = u_tid;
	}

	gtthread_app_exit();

	return(0);
}
Ejemplo n.º 3
0
int main(int argc, char *argv[])
//int main()
{
	isCreditScheduler = 0;
	if(argc > 1)
		if(*argv[1] == '1')
			isCreditScheduler = 1;	
	
	isCreditScheduler = 1;
	uthread_arg_t *uarg;
	int inx,i;
	
//	kthread_block_signal(SIGVTALRM);
//	kthread_block_signal(SIGUSR1);
	gtthread_app_init();
	uthread_info_init(); // initialises the uthread info that is shared among all uthreads. Used for logging purposes.

	init_possible_groups();
	for(i=0;i<TOTAL_GROUPS;i++)
		init_matrices(&possible_groups[i]);

	//int current_matrix_size_index, current_row_index, current_credit_value_index, current_num_thread_per_group_index, current_num_group_index;
	int size, rows_per_thread, current_row = 0, group_id = 0;
	for(inx=0; inx<NUM_THREADS; inx++)
	{
		size = possible_groups[group_id].matrix_size;
		rows_per_thread = size / (THREADS_PER_GROUP);
		
		uarg = &uargs[inx];
		uarg->_A = matrices_A[group_id];
		uarg->_B = matrices_B[group_id];
		uarg->_C = matrices_C[group_id];

		uarg->tid = inx;
		uarg->gid = group_id;
		uarg->start_row = current_row;
		uarg->end_row = current_row + rows_per_thread;
		uarg->start_col = 0;
		uarg->end_col = size;
		int credit = matrices_A[group_id]->matrix_group->credit_value;

		printf("group_id: %d, current_row: %d, rows_per_thread: %d, size: %d, credits: %d, inx: %d, NUM_THREADS: %d\n", 
			group_id, current_row, rows_per_thread, size,  credit, inx, NUM_THREADS);

		current_row = current_row + rows_per_thread;
		if(current_row == size)
		{
			current_row = 0;
			group_id++;
		}
//#ifdef GT_GROUP_SPLIT
		// Wanted to split the columns by groups !!! *
		//uarg->start_col = (uarg->gid * PER_GROUP_COLS);
//#endif
	//	printf("going to uthread_create\n");
		uthread_create(&utids[inx], uthread_mulmat, uarg, uarg->gid, credit, possible_groups[group_id].matrix_size);
	//`	printf("exit from uthread_create\n");
	}
	
//	kthread_unblock_signal(SIGVTALRM);
//	kthread_unblock_signal(SIGUSR1);
	FILE *fp, *fp1;
	fp = fopen("stat.txt","w+");
	fp1 = fopen("stat1.txt","w+");
	gtthread_app_exit();
	print_statistics(fp,fp1);
	init_group_stats();
	print_group_stats(fp,fp1);
	verify_answer();
	fclose(fp);
	fclose(fp1);

//	for(i=0;i<TOTAL_GROUPS;i++)
//	{
//		int size = possible_groups[i].matrix_size;
//		printf("Matrix A, i:%d, size: %d, credits: %d\n", i, size, possible_groups[i].credit_value);
//		print_matrix(matrices_A[i], size);
//		printf("Matrix B, i:%d, size: %d, credits: %d\n", i, size, possible_groups[i].credit_value);
//		print_matrix(matrices_B[i], size);
//		printf("Matrix C, i:%d, size: %d, credits: %d\n", i, size, possible_groups[i].credit_value);
//		print_matrix(matrices_C[i], size);
//	}

	// print_matrix(&C);
	// fprintf(stderr, "********************************");
	return(0);
}