Ignore:
Timestamp:
Jan 8, 2015, 11:50:25 AM (10 years ago)
Author:
alain
Message:

1) Change the user sbt_barrier_init() prototype: the two (nclusters/ntasks) arguments
replace the single (ntasks) argument.
2) Introduce an explicit (channel) argument in all iuser access functions to the NIC component.
Previously, the channel registered in the task context was an implicit argument.
The channel is still registered in the task context for checking.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • soft/giet_vm/giet_libs/barrier.c

    r468 r487  
    9898////////////////////////////////////////////////////
    9999void sbt_barrier_init( giet_sbt_barrier_t*  barrier,
    100                        unsigned int         ntasks )
     100                       unsigned int         nclusters,    // number of clusters
     101                       unsigned int         ntasks )      // tasks per clusters
    101102{
    102103    unsigned int x;          // x coordinate for one SBT node
     
    107108    unsigned int levels;     // depth of the SBT (number of levels)
    108109
    109 
    110110    // compute SBT characteristics
    111     if      ( ntasks == NB_PROCS_MAX      )  // mesh 1*1
     111    if      ( nclusters == 1 )  // mesh 1*1
    112112    {
    113113        x_size    = 1;
     
    115115        levels    = 1;
    116116    }
    117     else if ( ntasks == NB_PROCS_MAX * 2  )  // mesh 2*1
     117    else if ( nclusters == 2 )  // mesh 2*1
    118118    {
    119119        x_size    = 2;
     
    121121        levels    = 2;
    122122    }
    123     else if ( ntasks == NB_PROCS_MAX * 4  )  // mesh 2*2
     123    else if ( nclusters == 4 )  // mesh 2*2
    124124    {
    125125        x_size    = 2;
     
    127127        levels    = 3;
    128128    }
    129     else if ( ntasks == NB_PROCS_MAX * 8  )  // mesh 4*2
     129    else if ( nclusters == 8 )  // mesh 4*2
    130130    {
    131131        x_size    = 4;
     
    133133        levels    = 4;
    134134    }
    135     else if ( ntasks == NB_PROCS_MAX * 16 )  // mesh 4*4
     135    else if ( nclusters == 16 )  // mesh 4*4
    136136    {
    137137        x_size    = 4;
     
    139139        levels    = 5;
    140140    }
    141     else if ( ntasks == NB_PROCS_MAX * 32 )  // mesh 8*4
     141    else if ( nclusters == 32 )  // mesh 8*4
    142142    {
    143143        x_size    = 8;
     
    145145        levels    = 6;
    146146    }
    147     else if ( ntasks == NB_PROCS_MAX * 64 )  // mesh 8*8
     147    else if ( nclusters == 64 )  // mesh 8*8
    148148    {
    149149        x_size    = 8;
     
    151151        levels    = 7;
    152152    }
    153     else if ( ntasks == NB_PROCS_MAX * 128 )  // mesh 16*8
     153    else if ( nclusters == 128 )  // mesh 16*8
    154154    {
    155155        x_size    = 16;
     
    157157        levels    = 8;
    158158    }
    159     else if ( ntasks == NB_PROCS_MAX * 256 )  // mesh 16*16
     159    else if ( nclusters == 256 )  // mesh 16*16
    160160    {
    161161        x_size    = 16;
     
    168168        y_size    = 0;
    169169        levels    = 0;
    170         giet_exit("error in tree_barrier_init() : number of tasks must be power of 2\n");
     170        giet_exit("error in tree_barrier_init() : nclusters must be power of 2\n");
    171171    }
    172172
    173173    // ntasks initialisation
    174     barrier->ntasks = ntasks;
     174    barrier->ntasks = ntasks * nclusters;
    175175   
    176176#if GIET_DEBUG_USER_BARRIER
     
    214214
    215215    // recursively initialize all SBT nodes from root to bottom
    216     sbt_build( barrier, 0, 0, levels-1, NULL );
     216    sbt_build( barrier, 0, 0, levels-1, NULL, ntasks );
    217217
    218218    asm volatile ("sync" ::: "memory");
     
    240240                unsigned int         y,
    241241                unsigned int         level,
    242                 sbt_node_t*          parent )
     242                sbt_node_t*          parent,
     243                unsigned int         ntasks )
    243244{
    244245    // This recursive function initializes the SBT notes
     
    251252    {
    252253        // initializes target node
    253         node->arity    = NB_PROCS_MAX;   
    254         node->count    = NB_PROCS_MAX;   
     254        node->arity    = ntasks;   
     255        node->count    = ntasks;   
    255256        node->sense    = 0;   
    256257        node->level    = 0;   
     
    308309
    309310        // recursive calls for children nodes
    310         sbt_build( barrier , x0 , y0 , level-1 , node );
    311         sbt_build( barrier , x1 , y1 , level-1 , node );
     311        sbt_build( barrier , x0 , y0 , level-1 , node , ntasks );
     312        sbt_build( barrier , x1 , y1 , level-1 , node , ntasks );
    312313    }
    313314
Note: See TracChangeset for help on using the changeset viewer.