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); }
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); }
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); }