Re: UPC dynamic allocation

From: Costin Iancu (cciancu_at_lbl_dot_gov)
Date: Tue Apr 13 2010 - 09:56:34 PDT

  • Next message: Paul H. Hargrove: "Re: UPC dynamic allocation"
    Your program allocates memory and casts the result to (shared int *),
    which is correctly initialized and printed.
    The bupc_alloc seems to have allocated the right number of bits in the right places.
    
    Seems to me you should cast the result of the alloc to
    (shared [ASIZE] int *) ...
    
    Since alloc returns (shared void*) I can see how the wording in the spec is a little misleading. 
    
    Costin
    On Apr 13, 2010, at 5:45 AM, Reinhold Bader wrote:
    
    > Hello,
    > 
    > trying out upc_all_alloc() to obtain a distributed object with the following program:
    > 
    > #include <upc.h>
    > #include <stdlib.h>
    > #include <stdio.h>
    > 
    > #define ASIZE 4
    > 
    > int main(void) {
    > shared int *a;
    > int i, j, q;
    > 
    > a = (shared int *) upc_all_alloc(THREADS,ASIZE*sizeof(int));
    > for (i=0; i<ASIZE; i++) {
    >   a[MYTHREAD*ASIZE+i] = MYTHREAD;
    > }
    > upc_barrier;
    > if (MYTHREAD == 0) {
    >   for (q=0; q<THREADS; q++) {
    >      for (i=0; i<ASIZE; i++) {
    >         j = upc_threadof(&a[q*ASIZE+i]);
    >         printf("a[%d][%d] is on thread %d with value %d\n",q,i,\
    >                j,a[q*ASIZE+i]);
    >      }
    >   }
    > }
    > upc_barrier;
    > upc_free(a);
    > return 0;
    > }
    > 
    > I get the following output when running with 12 Threads:
    > a[0][0] is on thread 0 with value 0
    > a[0][1] is on thread 1 with value 0
    > a[0][2] is on thread 2 with value 0
    > a[0][3] is on thread 3 with value 0
    > a[1][0] is on thread 4 with value 1
    > a[1][1] is on thread 5 with value 1
    > a[1][2] is on thread 6 with value 1
    > a[1][3] is on thread 7 with value 1
    > ...
    > 
    > This seems to contradict the specification which says
    > "The upc all alloc function allocates shared space compatible with the following
    > declaration:
    > shared [nbytes] char[nblocks * nbytes]."
    > 
    > It appears the BUPC implementation performs
    > shared [1] char[nblocks * nbytes]
    > instead.
    > 
    > Regards
    > Reinhold
    > 
    > 
    > 
    
    -- 
    Costin C. Iancu                                                                                 Phone: 510-495-2122                                                    
    Future Technologies Group                                                           Fax:   510-486-6900
    Lawrence Berkeley National Laboratory           
    

  • Next message: Paul H. Hargrove: "Re: UPC dynamic allocation"