Ejemplo n.º 1
0
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;
}