UPC dynamic allocation

From: Reinhold Bader (Reinhold.Bader_at_lrz.de)
Date: Tue Apr 13 2010 - 05:45:11 PDT

  • Next message: Costin Iancu: "Re: UPC dynamic allocation"
    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
    

  • Next message: Costin Iancu: "Re: UPC dynamic allocation"