Re: issue with smp on x86 32b platform

From: George Caragea (george_at_east_dot_isi_dot_edu)
Date: Tue Aug 05 2008 - 14:27:16 PDT

  • Next message: Wes Bethel: "possible upc_memget() and upc_memput() bugs"
    Thanks Paul!
    
    I will try the experimental version and see if it works for us or not.
    
    George
    
    Paul H. Hargrove wrote:
    > George,
    >
    >   We've assigned bug #2314 to this issue: 
    > http://upc-bugs.lbl.gov/bugzilla/show_bug.cgi?id=2314
    >   Costin Iancu, our complier expert, was able to fix this bug in our 
    > development version.
    >   We plan a release for October which will include this fix.
    >   In the meantime, it is possible to access a fixed translator by 
    > compiling with 
    > "--translator=http://upc-translator.lbl.gov/upcc-nightly-dev.cgi" on 
    > the upcc command line, or by adding 
    > "translator=http://upc-translator.lbl.gov/upcc-nightly-dev.cgi" to 
    > ~/.upccrc
    >   However, be aware that this translator is experimental and might 
    > have different bugs.
    >
    > -Paul
    >
    > George Caragea wrote:
    >> Hi all,
    >>
    >> I am using berkeley-upc-2.6.0 on an i686 Linux machine, with the 
    >> online translator. I am using the smp conduit, with pthreads 
    >> (although I disabled pthreads to pinpoint the problem).  I think I 
    >> have encountered a bug either with the translator or the run-time 
    >> system.
    >>
    >> I am running the program below with one single thread (pthreads 
    >> disabled), but I cannot get the correct result. The program I am 
    >> trying to run is :
    >>
    >> --------------
    >> #include <upc_relaxed.h>
    >> #include <stdio.h>
    >> #include <upc.h>
    >>
    >> shared int *twiddle;
    >> //shared [1] int twiddle[2];
    >>
    >> int main(){
    >>
    >>  twiddle = (shared int *) upc_all_alloc(1, 2*sizeof(int));
    >>
    >>  int TID=0;
    >>  int index = 1-TID;
    >>
    >>  twiddle[TID]     = 1;
    >>  twiddle[1-TID]   = 2;
    >>  //twiddle[index]   = 2;
    >>
    >>  if(MYTHREAD == 0) {
    >>    int i;
    >>    for(i=0;i<2;i++){
    >>      printf("%d\n", twiddle[i]);
    >>    }
    >>    upc_free(twiddle);
    >>  }
    >> }
    >> ---------------
    >>
    >> I am compiling and running this with:
    >> $ upcc -T 1 -pthreads=0 fft_1.upc -o fft_1
    >> $ upcrun fft_1
    >>
    >> However, instead of printing the values 1 and 2, I get some random 
    >> numbers in the array.
    >>
    >> The problem seems to come from the line twiddle[1-TID]=2. If I use 
    >> twiddle[index] instead, it works just fine. I think there is some 
    >> casting problem. Running upcc -v I get these warnings from the 
    >> translator:
    >>
    >> !!!rearranging upc pointer arithmetic expression failed!!!
    >> [...]
    >> internal translator warning (from fft_1.upc:16): Attempt to directly 
    >> cast to upcr_{p}shared_ptr_t
    >>
    >> Am I doing something incorrect in the code? Note that when I compile 
    >> and run this on a x86_64 machine, it works fine. This makes me think 
    >> there is a problem with casting between 32b/64b pointers and values, 
    >> which seems to be the case when I look in the output of the 
    >> translator. The problem also happens when I use an array instead of 
    >> upc_all_alloc().
    >>
    >> I am attaching my upcc --version output and the output of the 
    >> translator for reference.
    >>
    >> Thank you,
    >> George
    >>
    >
    >
    

  • Next message: Wes Bethel: "possible upc_memget() and upc_memput() bugs"