void Render_Loop() { long step,i; PIXEL *local_image_address; MPIXEL *local_mask_image_address; char outfile[FILENAME_STRING_SIZE]; long image_partition,mask_image_partition; float inv_num_nodes; long my_node; THREAD_INIT_FREE(); LOCK(Global->IndexLock); my_node = Global->Index++; UNLOCK(Global->IndexLock); my_node = my_node%num_nodes; BARINCLUDE(Global->TimeBarrier); BARINCLUDE(Global->SlaveBarrier); /* POSSIBLE ENHANCEMENT: Here's where one might bind the process to a processor, if one wanted to. */ // Reset Models Here CarbonEnableModels(); inv_num_nodes = 1.0/(float)num_nodes; image_partition = ROUNDUP(image_length*inv_num_nodes); mask_image_partition = ROUNDUP(mask_image_length*inv_num_nodes); #ifdef DIM for (dim=0; dim<NM; dim++) { #endif for (step=0; step<ROTATE_STEPS; step++) { /* do rotation sequence */ /* POSSIBLE ENHANCEMENT: Here is where one might reset statistics, if one wanted to. */ frame = step; /* initialize images here */ local_image_address = image_address + image_partition * my_node; local_mask_image_address = mask_image_address + mask_image_partition * my_node; BARRIER(Global->SlaveBarrier,num_nodes); if (my_node == num_nodes-1) { for (i=image_partition*my_node; i<image_length; i++) *local_image_address++ = background; if (adaptive) for (i=mask_image_partition*my_node; i<mask_image_length; i++) *local_mask_image_address++ = NULL_PIXEL; } else { for (i=0; i<image_partition; i++) *local_image_address++ = background; if (adaptive) for (i=0; i<mask_image_partition; i++) *local_mask_image_address++ = NULL_PIXEL; } if (my_node == ROOT) { #ifdef DIM Select_View((float)STEP_SIZE, dim); #else Select_View((float)STEP_SIZE, Y); #endif } BARRIER(Global->SlaveBarrier,num_nodes); Global->Counter = num_nodes; Global->Queue[num_nodes][0] = num_nodes; Global->Queue[my_node][0] = 0; Render(my_node); if (my_node == ROOT) { if (ROTATE_STEPS > 1) { #ifdef DIM sprintf(outfile, "%s_%ld",filename, 1000+dim*ROTATE_STEPS+step); #else sprintf(outfile, "%s_%ld.tiff",filename, 1000+step); #endif /* Store_Image(outfile); p = image_address; for (zz = 0;zz < image_length;zz++) { tiff_image[zz] = (long) ((*p)*256*256*256 + (*p)*256*256 + (*p)*256 + (*p)); p++; } tiff_save_rgba(outfile,tiff_image,image_len[X],image_len[Y]); */ WriteGrayscaleTIFF(outfile, image_len[X],image_len[Y],image_len[X], image_address); } else { /* Store_Image(filename); p = image_address; for (zz = 0;zz < image_length;zz++) { tiff_image[zz] = (long) ((*p)*256*256*256 + (*p)*256*256 + (*p)*256 + (*p)); p++; } tiff_save_rgba(filename,tiff_image,image_len[X],image_len[Y]); */ strcat(filename,".tiff"); WriteGrayscaleTIFF(filename, image_len[X],image_len[Y],image_len[X], image_address); } } } #ifdef DIM } #endif }
void Render_Loop() { long step,i; PIXEL *local_image_address; MPIXEL *local_mask_image_address; char outfile[FILENAME_STRING_SIZE]; long image_partition,mask_image_partition; float inv_num_nodes; long my_node; {pthread_mutex_lock(&(Global->IndexLock));}; my_node = Global->Index++; {pthread_mutex_unlock(&(Global->IndexLock));}; my_node = my_node%num_nodes; {;}; {;}; /* POSSIBLE ENHANCEMENT: Here's where one might bind the process to a processor, if one wanted to. */ inv_num_nodes = 1.0/(float)num_nodes; image_partition = ROUNDUP(image_length*inv_num_nodes); mask_image_partition = ROUNDUP(mask_image_length*inv_num_nodes); #ifdef DIM for (dim=0; dim<NM; dim++) { #endif for (step=0; step<ROTATE_STEPS; step++) { /* do rotation sequence */ /* POSSIBLE ENHANCEMENT: Here is where one might reset statistics, if one wanted to. */ frame = step; /* initialize images here */ local_image_address = image_address + image_partition * my_node; local_mask_image_address = mask_image_address + mask_image_partition * my_node; { #line 271 unsigned long Error, Cycle; #line 271 long Cancel, Temp; #line 271 #line 271 Error = pthread_mutex_lock(&(Global->SlaveBarrier).mutex); #line 271 if (Error != 0) { #line 271 printf("Error while trying to get lock in barrier.\n"); #line 271 exit(-1); #line 271 } #line 271 #line 271 Cycle = (Global->SlaveBarrier).cycle; #line 271 if (++(Global->SlaveBarrier).counter != (num_nodes)) { #line 271 pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, &Cancel); #line 271 while (Cycle == (Global->SlaveBarrier).cycle) { #line 271 Error = pthread_cond_wait(&(Global->SlaveBarrier).cv, &(Global->SlaveBarrier).mutex); #line 271 if (Error != 0) { #line 271 break; #line 271 } #line 271 } #line 271 pthread_setcancelstate(Cancel, &Temp); #line 271 } else { #line 271 (Global->SlaveBarrier).cycle = !(Global->SlaveBarrier).cycle; #line 271 (Global->SlaveBarrier).counter = 0; #line 271 Error = pthread_cond_broadcast(&(Global->SlaveBarrier).cv); #line 271 } #line 271 pthread_mutex_unlock(&(Global->SlaveBarrier).mutex); #line 271 }; if (my_node == num_nodes-1) { for (i=image_partition*my_node; i<image_length; i++) *local_image_address++ = background; if (adaptive) for (i=mask_image_partition*my_node; i<mask_image_length; i++) *local_mask_image_address++ = NULL_PIXEL; } else { for (i=0; i<image_partition; i++) *local_image_address++ = background; if (adaptive) for (i=0; i<mask_image_partition; i++) *local_mask_image_address++ = NULL_PIXEL; } if (my_node == ROOT) { #ifdef DIM Select_View((float)STEP_SIZE, dim); #else Select_View((float)STEP_SIZE, Y); #endif } { #line 296 unsigned long Error, Cycle; #line 296 long Cancel, Temp; #line 296 #line 296 Error = pthread_mutex_lock(&(Global->SlaveBarrier).mutex); #line 296 if (Error != 0) { #line 296 printf("Error while trying to get lock in barrier.\n"); #line 296 exit(-1); #line 296 } #line 296 #line 296 Cycle = (Global->SlaveBarrier).cycle; #line 296 if (++(Global->SlaveBarrier).counter != (num_nodes)) { #line 296 pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, &Cancel); #line 296 while (Cycle == (Global->SlaveBarrier).cycle) { #line 296 Error = pthread_cond_wait(&(Global->SlaveBarrier).cv, &(Global->SlaveBarrier).mutex); #line 296 if (Error != 0) { #line 296 break; #line 296 } #line 296 } #line 296 pthread_setcancelstate(Cancel, &Temp); #line 296 } else { #line 296 (Global->SlaveBarrier).cycle = !(Global->SlaveBarrier).cycle; #line 296 (Global->SlaveBarrier).counter = 0; #line 296 Error = pthread_cond_broadcast(&(Global->SlaveBarrier).cv); #line 296 } #line 296 pthread_mutex_unlock(&(Global->SlaveBarrier).mutex); #line 296 }; Global->Counter = num_nodes; Global->Queue[num_nodes][0] = num_nodes; Global->Queue[my_node][0] = 0; Render(my_node); if (my_node == ROOT) { if (ROTATE_STEPS > 1) { #ifdef DIM sprintf(outfile, "%s_%ld",filename, 1000+dim*ROTATE_STEPS+step); #else sprintf(outfile, "%s_%ld.tiff",filename, 1000+step); #endif /* Store_Image(outfile); p = image_address; for (zz = 0;zz < image_length;zz++) { tiff_image[zz] = (long) ((*p)*256*256*256 + (*p)*256*256 + (*p)*256 + (*p)); p++; } tiff_save_rgba(outfile,tiff_image,image_len[X],image_len[Y]); */ WriteGrayscaleTIFF(outfile, image_len[X],image_len[Y],image_len[X], image_address); } else { /* Store_Image(filename); p = image_address; for (zz = 0;zz < image_length;zz++) { tiff_image[zz] = (long) ((*p)*256*256*256 + (*p)*256*256 + (*p)*256 + (*p)); p++; } tiff_save_rgba(filename,tiff_image,image_len[X],image_len[Y]); */ strcat(filename,".tiff"); WriteGrayscaleTIFF(filename, image_len[X],image_len[Y],image_len[X], image_address); } } } #ifdef DIM } #endif }