void * thread_trace(thr_parms * parms) { int irc; // shared but read-only so could be private too all_parms = parms; scene = parms->scene; startx = parms->startx; stopx = parms->stopx; starty = parms->starty; stopy = parms->stopy; jitterscale = 40.0*(scene.hres + scene.vres); totaly = parms->scene.vres-1; //Create mutex for pixel rendering pthread_mutexattr_settype (&rgb_mutexattr, PTHREAD_MUTEX_RECURSIVE_NP); pthread_mutex_init (&rgb_mutex, &rgb_mutexattr); parallel_thread (); // Destroy the rgb_mutex irc = pthread_mutex_destroy (&rgb_mutex); return(NULL); }
void parallelMergesort(value *array, int n) { pthread_mutex_init(&mutex, NULL); thread_count = 1; struct sorting_args arg; arg.array = array; arg.length = n; ARRAY_SIZE = n; parallel_thread(&arg); }
void * thread_trace(thr_parms * parms) { // shared but read-only so could be private too all_parms = parms; scene = parms->scene; startx = parms->startx; stopx = parms->stopx; starty = parms->starty; stopy = parms->stopy; jitterscale = 40.0*(scene.hres + scene.vres); totaly = parms->scene.vres-1; parallel_thread (); return(NULL); }
void * parallel_thread(void* arg) { struct sorting_args * args = (struct sorting_args*)arg; if (args->length == 1) return 0; int create = 0; if (args->length >= ARRAY_SIZE / 2) { /* Critical Section */ pthread_mutex_lock(&mutex); if (thread_count < NB_THREADS) { thread_count++; create = 1; } pthread_mutex_unlock(&mutex); } int middle = args->length / 2; if (create == 1){ struct sorting_args t_arg, t_arg2; pthread_t t; t_arg.array = args->array + middle; t_arg.length = args->length - middle; t_arg2.array = args->array; t_arg2.length = middle; pthread_create(&t, NULL, ¶llel_thread, &t_arg); printf("Creating thread %d\n", t_arg.length); parallel_thread(&t_arg2); pthread_join(t, NULL); } else { sequentialMergesort(args->array, args->length); } sequentialMerge(args->array, middle, args->length); return 0; }
void * thread_trace(thr_parms * parms) { // shared but read-only so could be private too all_parms = parms; scene = parms->scene; startx = parms->startx; stopx = parms->stopx; starty = parms->starty; stopy = parms->stopy; jitterscale = 40.0*(scene.hres + scene.vres); totaly = parms->scene.vres - 1; #if DO_ITT_NOTIFY __itt_resume(); #endif parallel_thread(); #if DO_ITT_NOTIFY __itt_pause(); #endif return(NULL); }