Re: need array of shared ptrs to shared structs

jcduell_at_lbl_dot_gov
Date: Mon Dec 05 2005 - 10:58:41 PST

  • Next message: Eric Frederich: "Dual Processor Machines"
    On Sun, Dec 04, 2005 at 08:21:26AM -0600, Steve Reinhardt wrote:
    > 
    > typedef struct {
    >         int a;
    >         int b;
    > } gink;
    > 
    > typedef struct {
    >         int a;
    >         int b;
    >         shared gink *c;         // private ptr to shared object
    >         shared gink *shared d;  // shared ptr to shared object
    >         shared int *e;          // private ptr to shared object
    >         shared int *shared f;   // shared ptr to shared object
    > } gink2;
    > 
    > shared gink2 aa[10][THREADS];
    > shared gink2 *shared cc[10][THREADS];
     
     
    > Having played with variations on this theme, it appears that UPC 
    > doesn't support a member of a structure that's a shared pointer to a 
    > shared object.  Is this so?
    
    Since UPC, like C, makes some guarantees about memory layout within
    structs, it can't create a struct in which some members are shared and
    some aren't.  So the 'shared' keyword is illegal for a member
    declaration, unless it qualifies a type that is pointed to.
    
    But this doesn't mean you can't have shared structs--you just have to
    make the entire struct shared.  You've done this already, here:
     
         shared gink2 aa[10][THREADS];
    
    Each struct in aa can be accessed by any thread, and any 'c' member can
    be manipulated by any thread.  So in effect 'c' *is* a 'shared gink
    *shared'.  
    
    Does that suffice for your purposes, or are you running into type issues
    (i.e. do you need to treat the address of 'c' fields as 'shared gink
    *shared')?
    
    -- 
    Jason Duell             Future Technologies Group
    <jcduell_at_lbl_dot_gov>       Computational Research Division
    Tel: +1-510-495-2354    Lawrence Berkeley National Laboratory
    

  • Next message: Eric Frederich: "Dual Processor Machines"