Ignore:
Timestamp:
Jul 27, 2015, 8:40:45 PM (9 years ago)
Author:
alain
Message:

Introduce support for the "shared" argument in the giet_tty_alloc() system call,
and replace the giet_shr_printf() system call by giet_tty_printf().

File:
1 edited

Legend:

Unmodified
Added
Removed
  • soft/giet_vm/applications/transpose/main.c

    r661 r669  
    3333#define CLUSTER_MAX           (X_MAX * Y_MAX)             // max number of clusters
    3434#define NN                    256                         // image size : nlines = npixels
    35 #define INITIAL_FILE_PATH     "misc/lena.raw"             // pathname on virtual disk
     35#define INITIAL_FILE_PATH     "/misc/lena_256.raw"        // pathname on virtual disk
    3636#define TRANSPOSED_FILE_PATH  "/home/lena_transposed.raw" // pathname on virtual disk
    3737#define RESTORED_FILE_PATH    "/home/lena_restored.raw"   // pathname on virtual disk
    3838#define INSTRUMENTATION_OK    1                           // display statistics on TTY
     39
     40// macro to use a shared TTY
     41#define printf(...)     lock_acquire( &tty_lock ); \
     42                        giet_tty_printf(__VA_ARGS__);  \
     43                        lock_release( &tty_lock )
    3944
    4045///////////////////////////////////////////////////////
     
    6166unsigned check_line_after[NN];
    6267
    63 // global synchronisation barrier
     68// lock protecting shared TTY
     69user_lock_t  tty_lock;
     70
     71// global & local synchronisation variables
    6472giet_sqt_barrier_t barrier;
    6573
     
    98106    unsigned int task_id       = (cluster_id * nprocs) + lpid;  // "continuous" task index
    99107
     108    // checking parameters
     109    giet_assert( ((nprocs == 1) || (nprocs == 2) || (nprocs == 4)),
     110                 "[TRANSPOSE ERROR] number of procs per cluster must be 1, 2 or 4");
     111
     112    giet_assert( ((x_size == 1) || (x_size == 2) || (x_size == 4) ||
     113                  (x_size == 8) || (x_size == 16)),
     114                 "[TRANSPOSE ERROR] x_size must be 1,2,4,8,16");
     115
     116    giet_assert( ((y_size == 1) || (y_size == 2) || (y_size == 4) ||
     117                  (y_size == 8) || (y_size == 16)),
     118                 "[TRANSPOSE ERROR] y_size must be 1,2,4,8,16");
     119
     120    giet_assert( (ntasks <= NN ),
     121                 "[TRANSPOSE ERROR] number of tasks larger than number of lines");
    100122
    101123    ///////////////////////////////////////////////////////////////////////
     
    107129    if ( (x==0) && (y==0) && (lpid==0) )
    108130    {
    109         if ((nprocs != 1) && (nprocs != 2) && (nprocs != 4))
    110         {
    111             giet_exit("[TRANSPOSE ERROR] number of procs per cluster must be 1, 2 or 4");
    112         }
    113         if ((nclusters != 1) && (nclusters != 2) && (nclusters != 4) &&
    114             (nclusters != 8) && (nclusters != 16) && (nclusters != 32) && (nclusters != 64) )
    115         {
    116             giet_exit("[TRANSPOSE ERROR] number of clusters must be 1,2,4,8,16,32,64");
    117         }
    118         if ( ntasks > NN )
    119         {
    120             giet_exit("[TRANSPOSE ERROR] number of tasks larger than number of lines");
    121         }
    122 
     131        // shared TTY allocation
     132        giet_tty_alloc( 1 );
     133
     134        // TTY lock initialisation
     135        lock_init( &tty_lock);
     136     
    123137        // distributed heap initialisation
    124138        unsigned int cx , cy;
     
    134148        sqt_barrier_init( &barrier, x_size , y_size , nprocs );
    135149
    136         giet_shr_printf("\n[TRANSPOSE] Proc [0,0,0] completes heap & barrier init at cycle %d\n",
    137                         giet_proctime() );
     150        printf("\n[TRANSPOSE] Proc [0,0,0] completes initialisation at cycle %d\n",
     151               giet_proctime() );
    138152
    139153        global_init_ok = 1;
     
    157171
    158172        if ( (x==0) && (y==0) )
    159         giet_shr_printf("\n[TRANSPOSE] Proc [%d,%d,%d] completes buffer allocation"
    160                         " for cluster[%d,%d] at cycle %d\n"
    161                         " - buf_in  = %x\n"
    162                         " - buf_out = %x\n",
    163                         x, y, lpid, x, y, giet_proctime(),
    164                         (unsigned int)buf_in[cluster_id], (unsigned int)buf_out[cluster_id] );
     173        printf("\n[TRANSPOSE] Proc [%d,%d,%d] completes buffer allocation"
     174               " for cluster[%d,%d] at cycle %d\n"
     175               " - buf_in  = %x\n"
     176               " - buf_out = %x\n",
     177               x, y, lpid, x, y, giet_proctime(),
     178               (unsigned int)buf_in[cluster_id], (unsigned int)buf_out[cluster_id] );
    165179
    166180        ///////////////////////////////////////////////////////////////////////
     
    173187        if ( fd_initial < 0 )
    174188        {
    175             giet_shr_printf("\n[TRANSPOSE ERROR] Proc [%d,%d,%d] cannot open file %s\n",
    176                             x , y , lpid , INITIAL_FILE_PATH );
     189            printf("\n[TRANSPOSE ERROR] Proc [%d,%d,%d] cannot open file %s\n",
     190                   x , y , lpid , INITIAL_FILE_PATH );
    177191            giet_exit(" open() failure");
    178192        }
    179193        else if ( (x==0) && (y==0) && (lpid==0) )
    180194        {
    181             giet_shr_printf("\n[TRANSPOSE] Proc [0,0,0] open file %s / fd = %d\n",
    182                             INITIAL_FILE_PATH , fd_initial );
     195            printf("\n[TRANSPOSE] Proc [0,0,0] open file %s / fd = %d\n",
     196                   INITIAL_FILE_PATH , fd_initial );
    183197        }
    184198
     
    187201        if ( fd_transposed < 0 )
    188202        {
    189             giet_shr_printf("\n[TRANSPOSE ERROR] Proc [%d,%d,%d] cannot open file %s\n",
     203            printf("\n[TRANSPOSE ERROR] Proc [%d,%d,%d] cannot open file %s\n",
    190204                            x , y , lpid , TRANSPOSED_FILE_PATH );
    191205            giet_exit(" open() failure");
     
    193207        else if ( (x==0) && (y==0) && (lpid==0) )
    194208        {
    195             giet_shr_printf("\n[TRANSPOSE] Proc [0,0,0] open file %s / fd = %d\n",
    196                             TRANSPOSED_FILE_PATH , fd_transposed );
     209            printf("\n[TRANSPOSE] Proc [0,0,0] open file %s / fd = %d\n",
     210                   TRANSPOSED_FILE_PATH , fd_transposed );
    197211        }
    198212
     
    201215        if ( fd_restored < 0 )
    202216        {
    203             giet_shr_printf("\n[TRANSPOSE ERROR] Proc [%d,%d,%d] cannot open file %s\n",
    204                             x , y , lpid , RESTORED_FILE_PATH );
     217            printf("\n[TRANSPOSE ERROR] Proc [%d,%d,%d] cannot open file %s\n",
     218                   x , y , lpid , RESTORED_FILE_PATH );
    205219            giet_exit(" open() failure");
    206220        }
    207221        else if ( (x==0) && (y==0) && (lpid==0) )
    208222        {
    209             giet_shr_printf("\n[TRANSPOSE] Proc [0,0,0] open file %s / fd = %d\n",
    210                             RESTORED_FILE_PATH , fd_restored );
     223            printf("\n[TRANSPOSE] Proc [0,0,0] open file %s / fd = %d\n",
     224                   RESTORED_FILE_PATH , fd_restored );
    211225        }
    212226
     
    244258                                 SEEK_SET ) != offset )
    245259            {
    246                 giet_shr_printf("\n[TRANSPOSE ERROR] Proc [%d,%d,%d] cannot seek fd = %d\n",
    247                                 x , y , lpid , fd_in );
     260                printf("\n[TRANSPOSE ERROR] Proc [%d,%d,%d] cannot seek fd = %d\n",
     261                       x , y , lpid , fd_in );
    248262                giet_exit(" seek() failure");
    249263            }
     
    254268                                pixels ) != pixels )
    255269            {
    256                 giet_shr_printf("\n[TRANSPOSE ERROR] Proc [%d,%d,%d] cannot read fd = %d\n",
    257                                 x , y , lpid , fd_in );
     270                printf("\n[TRANSPOSE ERROR] Proc [%d,%d,%d] cannot read fd = %d\n",
     271                       x , y , lpid , fd_in );
    258272                giet_exit(" read() failure");
    259273            }
    260274
    261275            if ( (x==0) && (y==0) )
    262             giet_shr_printf("\n[TRANSPOSE] Proc [%d,%d,%d] completes load"
    263                             "  for iteration %d at cycle %d\n",
    264                             x, y, lpid, iteration, giet_proctime() );
     276            printf("\n[TRANSPOSE] Proc [%d,%d,%d] completes load"
     277                   "  for iteration %d at cycle %d\n",
     278                   x, y, lpid, iteration, giet_proctime() );
    265279        }
    266280
     
    314328        }
    315329
    316         if ( lpid == 0 )
    317         {
    318             if ( (x==0) && (y==0) )
    319             giet_shr_printf("\n[TRANSPOSE] proc [%d,%d,0] completes transpose"
    320                             " for iteration %d at cycle %d\n",
    321                             x, y, iteration, giet_proctime() );
     330//        if ( lpid == 0 )
     331        {
     332//            if ( (x==0) && (y==0) )
     333            printf("\n[TRANSPOSE] proc [%d,%d,0] completes transpose"
     334                   " for iteration %d at cycle %d\n",
     335                   x, y, iteration, giet_proctime() );
    322336
    323337        }
     
    340354                             npt );
    341355
    342         if ( (x==0) && (y==0) && (lpid==0) )
    343         giet_shr_printf("\n[TRANSPOSE] Proc [%d,%d,%d] completes display"
    344                         " for iteration %d at cycle %d\n",
    345                         x, y, lpid, iteration, giet_proctime() );
     356//        if ( (x==0) && (y==0) && (lpid==0) )
     357        printf("\n[TRANSPOSE] Proc [%d,%d,%d] completes display"
     358               " for iteration %d at cycle %d\n",
     359               x, y, lpid, iteration, giet_proctime() );
    346360
    347361        DISP_END[x][y][lpid] = giet_proctime();
     
    364378                                 SEEK_SET ) != offset )
    365379            {
    366                 giet_shr_printf("\n[TRANSPOSE ERROR] Proc [%d,%d,%d] cannot seek fr = %d\n",
    367                                 x , y , lpid , fd_out );
     380                printf("\n[TRANSPOSE ERROR] Proc [%d,%d,%d] cannot seek fr = %d\n",
     381                       x , y , lpid , fd_out );
    368382                giet_exit(" seek() failure");
    369383            }
     
    374388                                 pixels ) != pixels )
    375389            {
    376                 giet_shr_printf("\n[TRANSPOSE ERROR] Proc [%d,%d,%d] cannot write fd = %d\n",
    377                                 x , y , lpid , fd_out );
     390                printf("\n[TRANSPOSE ERROR] Proc [%d,%d,%d] cannot write fd = %d\n",
     391                       x , y , lpid , fd_out );
    378392                giet_exit(" write() failure");
    379393            }
    380394
    381395            if ( (x==0) && (y==0) )
    382             giet_shr_printf("\n[TRANSPOSE] Proc [%d,%d,%d] completes store"
    383                             "  for iteration %d at cycle %d\n",
    384                             x, y, lpid, iteration, giet_proctime() );
     396            printf("\n[TRANSPOSE] Proc [%d,%d,%d] completes store"
     397                   "  for iteration %d at cycle %d\n",
     398                   x, y, lpid, iteration, giet_proctime() );
    385399        }
    386400
     
    437451            }
    438452
    439             giet_shr_printf("\n   ---------------- Instrumentation Results ---------------------\n");
    440 
    441             giet_shr_printf(" - LOAD_START : min = %d / max = %d / med = %d / delta = %d\n",
    442                             min_load_start, max_load_start, (min_load_start+max_load_start)/2,
    443                             max_load_start-min_load_start);
    444 
    445             giet_shr_printf(" - LOAD_END   : min = %d / max = %d / med = %d / delta = %d\n",
    446                             min_load_ended, max_load_ended, (min_load_ended+max_load_ended)/2,
    447                             max_load_ended-min_load_ended);
    448 
    449             giet_shr_printf(" - TRSP_START : min = %d / max = %d / med = %d / delta = %d\n",
    450                             min_trsp_start, max_trsp_start, (min_trsp_start+max_trsp_start)/2,
    451                             max_trsp_start-min_trsp_start);
    452 
    453             giet_shr_printf(" - TRSP_END   : min = %d / max = %d / med = %d / delta = %d\n",
    454                             min_trsp_ended, max_trsp_ended, (min_trsp_ended+max_trsp_ended)/2,
    455                             max_trsp_ended-min_trsp_ended);
    456 
    457             giet_shr_printf(" - DISP_START : min = %d / max = %d / med = %d / delta = %d\n",
    458                             min_disp_start, max_disp_start, (min_disp_start+max_disp_start)/2,
    459                             max_disp_start-min_disp_start);
    460 
    461             giet_shr_printf(" - DISP_END   : min = %d / max = %d / med = %d / delta = %d\n",
    462                             min_disp_ended, max_disp_ended, (min_disp_ended+max_disp_ended)/2,
    463                             max_disp_ended-min_disp_ended);
    464 
    465             giet_shr_printf(" - STOR_START : min = %d / max = %d / med = %d / delta = %d\n",
    466                             min_stor_start, max_stor_start, (min_stor_start+max_stor_start)/2,
    467                             max_stor_start-min_stor_start);
    468 
    469             giet_shr_printf(" - STOR_END   : min = %d / max = %d / med = %d / delta = %d\n",
    470                             min_stor_ended, max_stor_ended, (min_stor_ended+max_stor_ended)/2,
    471                             max_stor_ended-min_stor_ended);
     453            printf("\n   ---------------- Instrumentation Results ---------------------\n");
     454
     455            printf(" - LOAD_START : min = %d / max = %d / med = %d / delta = %d\n",
     456                   min_load_start, max_load_start, (min_load_start+max_load_start)/2,
     457                   max_load_start-min_load_start);
     458
     459            printf(" - LOAD_END   : min = %d / max = %d / med = %d / delta = %d\n",
     460                   min_load_ended, max_load_ended, (min_load_ended+max_load_ended)/2,
     461                   max_load_ended-min_load_ended);
     462
     463            printf(" - TRSP_START : min = %d / max = %d / med = %d / delta = %d\n",
     464                   min_trsp_start, max_trsp_start, (min_trsp_start+max_trsp_start)/2,
     465                   max_trsp_start-min_trsp_start);
     466
     467            printf(" - TRSP_END   : min = %d / max = %d / med = %d / delta = %d\n",
     468                   min_trsp_ended, max_trsp_ended, (min_trsp_ended+max_trsp_ended)/2,
     469                   max_trsp_ended-min_trsp_ended);
     470
     471            printf(" - DISP_START : min = %d / max = %d / med = %d / delta = %d\n",
     472                   min_disp_start, max_disp_start, (min_disp_start+max_disp_start)/2,
     473                   max_disp_start-min_disp_start);
     474
     475            printf(" - DISP_END   : min = %d / max = %d / med = %d / delta = %d\n",
     476                   min_disp_ended, max_disp_ended, (min_disp_ended+max_disp_ended)/2,
     477                   max_disp_ended-min_disp_ended);
     478
     479            printf(" - STOR_START : min = %d / max = %d / med = %d / delta = %d\n",
     480                   min_stor_start, max_stor_start, (min_stor_start+max_stor_start)/2,
     481                   max_stor_start-min_stor_start);
     482
     483            printf(" - STOR_END   : min = %d / max = %d / med = %d / delta = %d\n",
     484                   min_stor_ended, max_stor_ended, (min_stor_ended+max_stor_ended)/2,
     485                   max_stor_ended-min_stor_ended);
    472486        }
    473487
     
    497511    }
    498512
    499     // clean up
    500     if ( (x==0) && (y == 0) && (lpid == 0) )
    501     {
    502         giet_fat_remove( "/home/lena_transposed" , 0 );
    503         giet_fat_remove( "/home/lena_restored" , 0 );
    504 
    505         giet_fat_remove( "/home" , 1 );
    506     }
    507    
    508513    giet_exit("Completed");
    509514
Note: See TracChangeset for help on using the changeset viewer.