int main(int argc, char **argv) { int i; int num = get_num_of_cores(); pthread_attr_t attr; usage(argv[0]); if (argc < 7) exit(0); X0 = atof(argv[1]); a = atof(argv[2]); A = atof(argv[3]); M = atof(argv[4]); errta = atof(argv[5]); iters = atof(argv[6]); void *status; #if DEBUG fprintf(stderr, "Number of cores: %d\n", num); #endif pthread_attr_init(&attr); pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE); pthread_t *threads = (pthread_t *) malloc ((size_t)num * sizeof(pthread_t)); memset( (void *)threads, 0, (size_t)num * sizeof(pthread_t) ); for (i = 0; i < num; i++) { int err = pthread_create(&threads[i], &attr, thread_code, (void *)i); if (err) { fprintf(stderr, "ERROR: return code from pthread_create() is %d\n", err); perror("pthread_create()"); exit(-1); } } for (i = 0; i < num; i++) { int err = pthread_join(threads[i], &status); if (err) { fprintf(stderr, "ERROR: return code from pthread_join() is %d\n", err); perror("pthread_join()"); exit(-1); } } pthread_exit(NULL); }
void pthread_init(int kt) { int mode = kt; int num_cores = get_num_of_cores(); int num_hyperthreads = get_num_of_hyperthreads(); //sem_init(&sem_kern, 0, 1 ); switch(mode) { case ULONLY : desired_kth = 1; break; case KLMATCHCORES : desired_kth = num_cores; break; case KLMATCHHYPER : desired_kth = num_cores * num_hyperthreads; break; case KLALWAYS : desired_kth = 32767; break; } return; }