Re: Exercising Collectives

From: Dan Bonachea (bonachea_at_cs_dot_berkeley_dot_edu)
Date: Tue Oct 11 2005 - 21:49:42 PDT

  • Next message: Christian Terboven: "problem with bupc_extern_free"
    At 03:46 PM 10/11/2005, Jaisudha Purushothaman wrote:
    >Hi,
    >  I am interested in compiling MTU's collective library in Berkeley's UPC
    >and run some performance measurements. But, I get messages that flags
    >such as "UPC_IN_ALLSYNC are being redefined" because Berkeley's UPC has
    >its own built-in collectives. Is there a way in which I can recompile the
    >collectives replacing the built-in ones with my own library?
    
    Hi Jaisudha -
    
    The UPC_{IN,OUT}_*SYNC flags and upc_flag_t are no longer part of the 
    collectives library. As of UPC language spec 1.2, they are required to be 
    defined in upc.h, which means that every UPC 1.2 compliant compiler should 
    provide them for you. This change was made specifically to allow 3rd party 
    implementations of UPC collectives and UPC-IO (both of which use these 
    definitions) to work with UPC 1.2 compilers that provide built-in versions of 
    these libraries.
    
    Consequently, the fix should be to remove those definitions from your 
    upc_collective.h and simply use the compiler-provided ones. Note doing so 
    means your code might need to be tweaked to avoid relying on any properties of 
    those definitions that are not required by the spec (eg if you were relying on 
    UPC_IN_ALLSYNC==4, that assumption may now be invalidated).
    
    Because you may want to use your library with older pre-1.2 compilers, you can 
    handle both with something like:
    
    your upc_collective.h:
    
    #if __UPC_VERSION__ < 200505
       typedef ... upc_flag_t;
       #define UPC_IN_ALLSYNC ...
    #else
       /* UPC 1.2 and newer compilers provide all the above in upc.h */
       #include <upc.h>
    #endif
    
    Dan 
    

  • Next message: Christian Terboven: "problem with bupc_extern_free"