Ignore:
Timestamp:
Jul 31, 2014, 8:47:14 PM (10 years ago)
Author:
alain
Message:

1) Introducing the SBT barrier (Sliced Binary Tree)

in the barrier.h library.

2) Introducing a new remote_malloc.h library.

File:
1 edited

Legend:

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

    r295 r368  
    55// Copyright (c) UPMC-LIP6
    66///////////////////////////////////////////////////////////////////////////////////
     7// The barrier.c and barrier.h files are part of the GIET-VM nano-kernel.
     8// This user-level library provides a synchronisation service between several
     9// tasks sharing the same address space in a parallel multi-tasks application.
     10//
     11// There is actually two types of barriers:
     12// 1) The "giet_barrier_t" is a simple sense-reversing barrier.
     13//    It can be safely used several times (in a loop for example),
     14//    but it does not scale, and should not be used when the number
     15//    of tasks is larger than few tens.
     16//
     17// 2) The giet_sbt_barrier_t" can be used in multi-clusters architectures,
     18//    and is implemented as a physically distributed Sliced-Binary-Tree (SBT).
     19//    WARNING: The following placement constraints must be respected:
     20//    - The number of tasks must be a power of 2.
     21//    - There is one task per processor in a given cluster.
     22//    - The involved clusters form a mesh[N][N] or a mesh[N][N/2]
     23//    - The lower left involved cluster is cluster(0,0) 
     24//
     25// Neither the barrier_init(), nor the barrier_wait() function require a syscall.
     26// For both types of barriers, the barrier initialisation should be done by
     27// one single task.
     28///////////////////////////////////////////////////////////////////////////////////
    729
    830#ifndef _BARRIER_H_
    931#define _BARRIER_H_
    1032
     33#include "hard_config.h"
     34
    1135///////////////////////////////////////////////////////////////////////////////////
    12 //  barrier structure
     36///////////////////////////////////////////////////////////////////////////////////
     37//  simple barrier structure and access functions
     38///////////////////////////////////////////////////////////////////////////////////
    1339///////////////////////////////////////////////////////////////////////////////////
    1440
    1541typedef struct giet_barrier_s
    1642{
    17     char name[32];      // barrier name
    18     unsigned int init;  // total number of participants
    19     unsigned int count; // number of not yet arrived tasks
     43    char         name[32];   // barrier name
     44    unsigned int sense;      // barrier state (toggle)
     45    unsigned int ntasks;     // total number of expected tasks
     46    unsigned int count;      // number of not arrived tasks
    2047} giet_barrier_t;
    2148
    22 //////////////////////////////////////////////////////////////////////////////
    23 //  access functions
    24 //////////////////////////////////////////////////////////////////////////////
     49///////////////////////////////////////////////////
     50extern void barrier_init( giet_barrier_t* barrier,
     51                          unsigned int    ntasks );   
    2552
    26 void barrier_init( giet_barrier_t* barrier,
    27                    unsigned int    value );  // number of tasks 
     53////////////////////////////////////////////////////
     54extern void barrier_wait( giet_barrier_t* barrier );
    2855
    29 void barrier_wait( giet_barrier_t* barrier );
     56///////////////////////////////////////////////////////////////////////////////////
     57//////////////////////////////////////////////////////////////////////////////////
     58// SBT barrier structures and access functions
     59//////////////////////////////////////////////////////////////////////////////////
     60//////////////////////////////////////////////////////////////////////////////////
     61
     62typedef struct sbt_node_s
     63{
     64    unsigned int       arity;           // number of children (must be 2 or 4)
     65    unsigned int       count;           // number of not arrived children
     66    unsigned int       sense;           // barrier state (toggle)
     67    unsigned int       level;           // hierarchical level (0 is bottom)
     68    struct sbt_node_s* parent;          // pointer on parent node (NULL for root)
     69    struct sbt_node_s* child0;          // pointer on children node
     70    struct sbt_node_s* child1;          // pointer on children node
     71} sbt_node_t;
     72
     73#define SBT_NODE_SIZE  32
     74
     75typedef struct giet_sbt_barrier_s
     76{
     77    char            name[32];                 // barrier name
     78    unsigned int    ntasks;                   // total number of expected tasks
     79    sbt_node_t*     node[X_SIZE][Y_SIZE][9];  // array of pointers on SBT nodes
     80} giet_sbt_barrier_t;
     81
     82///////////////////////////////////////////////////////////
     83extern void sbt_barrier_init( giet_sbt_barrier_t*  barrier,
     84                              unsigned int         ntasks );   
     85
     86/////////////////////////////////////////////////////////////
     87extern void sbt_barrier_wait( giet_sbt_barrier_t*  barrier );
     88
     89/////////////////////////////////////////////
     90void sbt_build( giet_sbt_barrier_t*  barrier,
     91                unsigned int         x,
     92                unsigned int         y,
     93                unsigned int         level,
     94                sbt_node_t*          parent );
     95
     96///////////////////////////////////////
     97void sbt_decrement( sbt_node_t* node );
     98
     99///////////////////////////////////
     100void sbt_release( sbt_node_t* node,
     101                  unsigned int expected );
     102
     103
    30104
    31105#endif
Note: See TracChangeset for help on using the changeset viewer.