#include "stdio.h" #define NL 512 #define NP 512 #define NB_IMAGES 1 #define BLOCK_SIZE 512 #define PRINTF if(local_id == 0) tty_printf /////////////////////////////////////////// // tricks to read parameters from ldscript /////////////////////////////////////////// struct plaf; extern struct plaf seg_heap_base; extern struct plaf NB_PROCS; extern struct plaf NB_CLUSTERS; ///////////// void main() { unsigned int image = 0; unsigned int date = 0; unsigned int c; // cluster index for loops unsigned int l; // line index for loops unsigned int p; // pixel index for loops unsigned int proc_id = procid(); // processor id unsigned int nprocs = (unsigned int)&NB_PROCS; // number of processors per cluster unsigned int nclusters = (unsigned int)&NB_CLUSTERS; // number of clusters unsigned int local_id = proc_id%nprocs; // local processor id unsigned int cluster_id = proc_id/nprocs; // cluster id unsigned int base = (unsigned int)&seg_heap_base; // base address for shared buffers unsigned int increment = (0x80000000 / nclusters) * 2; // cluster increment unsigned int ntasks = nclusters * nprocs; // number of tasks unsigned int nblocks = (NP*NL) / BLOCK_SIZE; // number of blocks per image PRINTF("\n *** Entering main at cycle %d ***\n\n", proctime()); // parameters checking if( (nprocs != 1) && (nprocs != 2) && (nprocs != 4) ) { PRINTF("NB_PROCS must be 1, 2 or 4\n"); } if( (nclusters != 1) && (nclusters != 2) && (nclusters != 4) && (nclusters != 8) && (nclusters != 16) && (nclusters != 32) && (nclusters != 64) && (nclusters !=128) && (nclusters != 256) ) { PRINTF("NB_CLUSTERS must be a power of 1 between 1 and 256\n"); } if( ntasks > 1024 ) { PRINTF("NB_PROCS * NB_CLUSTERS cannot be larger than 1024\n"); } if( proc_id >= ntasks ) { PRINTF("processor id %d larger than NB_CLUSTERS*NB_PROCS\n", proc_id); } // Arrays of pointers on the shared, distributed buffers containing the images // These arrays are indexed by the cluster index (sized for the worst case : 256 clusters) unsigned char* A[256]; unsigned char* B[256]; // Arrays of pointers on the instrumentation arrays // These arrays are indexed by the cluster index (sized for the worst case : 256 clusters) // each pointer points on the base adress of an array of NPROCS unsigned int unsigned int* LOAD_START[256]; unsigned int* LOAD_ENDED[256]; unsigned int* TRSP_START[256]; unsigned int* TRSP_ENDED[256]; unsigned int* DISP_START[256]; unsigned int* DISP_ENDED[256]; // shared buffers address definition // from the seg_heap_base and increment depending on the cluster index // These arrays of pointers are identical and replicated in the stack of each task for( c=0 ; c max_load_start ) max_load_start = LOAD_START[cc][pp]; if ( LOAD_ENDED[cc][pp] < min_load_ended ) min_load_ended = LOAD_ENDED[cc][pp]; if ( LOAD_ENDED[cc][pp] > max_load_ended ) max_load_ended = LOAD_ENDED[cc][pp]; if ( TRSP_START[cc][pp] < min_trsp_start ) min_trsp_start = TRSP_START[cc][pp]; if ( TRSP_START[cc][pp] > max_trsp_start ) max_trsp_start = TRSP_START[cc][pp]; if ( TRSP_ENDED[cc][pp] < min_trsp_ended ) min_trsp_ended = TRSP_ENDED[cc][pp]; if ( TRSP_ENDED[cc][pp] > max_trsp_ended ) max_trsp_ended = TRSP_ENDED[cc][pp]; if ( DISP_START[cc][pp] < min_disp_start ) min_disp_start = DISP_START[cc][pp]; if ( DISP_START[cc][pp] > max_disp_start ) max_disp_start = DISP_START[cc][pp]; if ( DISP_ENDED[cc][pp] < min_disp_ended ) min_disp_ended = DISP_ENDED[cc][pp]; if ( DISP_ENDED[cc][pp] > max_disp_ended ) max_disp_ended = DISP_ENDED[cc][pp]; } } PRINTF(" - LOAD_START : min = %d / max = %d / med = %d / delta = %d\n", min_load_start, max_load_start, (min_load_start+max_load_start)/2, max_load_start-min_load_start); PRINTF(" - LOAD_END : min = %d / max = %d / med = %d / delta = %d\n", min_load_ended, max_load_ended, (min_load_ended+max_load_ended)/2, max_load_ended-min_load_ended); PRINTF(" - TRSP_START : min = %d / max = %d / med = %d / delta = %d\n", min_trsp_start, max_trsp_start, (min_trsp_start+max_trsp_start)/2, max_trsp_start-min_trsp_start); PRINTF(" - TRSP_END : min = %d / max = %d / med = %d / delta = %d\n", min_trsp_ended, max_trsp_ended, (min_trsp_ended+max_trsp_ended)/2, max_trsp_ended-min_trsp_ended); PRINTF(" - DISP_START : min = %d / max = %d / med = %d / delta = %d\n", min_disp_start, max_disp_start, (min_disp_start+max_disp_start)/2, max_disp_start-min_disp_start); PRINTF(" - DISP_END : min = %d / max = %d / med = %d / delta = %d\n", min_disp_ended, max_disp_ended, (min_disp_ended+max_disp_ended)/2, max_disp_ended-min_disp_ended); PRINTF(" - BARRIER TRSP/DISP = %d\n", min_disp_start - max_trsp_ended); } // next image image++; } // end while image while(1); } // end main()