Ok; how can I build it in re-entrant mode and check whether I might have 
done so already (since the successful build took a long time...)?
Regarding the separation of memory regions: What is wrong with the 
following code:

    int i, N = 10;                        
    mpf_t a[N], b; 
    for (i=0; i<N; i++) { mpf_init(a[i]);  }
    mpf_init(b); 

    #pragma omp parallel private(a, b)            
     {            
        for (i=0; i<N; i++) { mpf_set_d(a[i], (double) i); }    
        mpf_set_d(b, 1.0);
        
        #pragma omp for    
        for (i=0; i<N; i++) {                                               
                                             
            mpf_add(a[i], a[i], b);
        }
    }

which again lets the program crash at runtime only.
And where is a good introduction to using pthreads?
Thanks a lot.        


On Thursday, November 12, 2015 at 11:22:46 AM UTC+1, Bill Hart wrote:
>
> Hi,
>
> You need to build MPIR in reentrant mode.
>
> Also, you need to ensure that no two threads can write to the same MPIR 
> variable at the same time. It's just like writing any other parallel 
> program which uses data structures. There must be a separation of memory 
> regions used by the different threads. This is harder to do with OpenMP 
> than with pthreads directly.
>
> Bill.
>
> On 12 November 2015 at 11:07, <highcal...@gmail.com <javascript:>> wrote:
>
>> Dear Bill, Dear All,
>>
>> after using MPIR successfully for some time, I am looking for a faster 
>> execution of my code and though of a parallel version. Is there a way to do 
>> it? 
>>
>> I tried OpenMP by doing the following: In a toy example, I included 
>> <omp.h>, gcc’ed with "–fopenmp", and along the following non-MPIR code: 
>>
>>  
>>
>>                 int i, nloops, thread_id=0, N = 1000000;
>>
>>  
>>
>>                 #pragma omp parallel private(thread_id, nloops)              
>>                             
>>
>>
>>                 {                                             
>>
>>                                nloops=0; 
>>
>>  
>>
>>                 #pragma omp for            
>>
>>                                for (i=0; i<N; i++) {
>>
>>                                                nloops++;                     
>>       
>>
>>
>>                                }
>>
>>                                thread_id = omp_get_thread_num();
>>
>>                                printf("Thread %d performed %d iterations 
>> of the loop.\n", thread_id, nloops );
>>
>>                 }
>>
>>  
>>
>> which resulted in the output:
>>
>> Thread 3 performed 250000 iterations of the loop.
>>
>> Thread 0 performed 250000 iterations of the loop.
>>
>> Thread 2 performed 250000 iterations of the loop.
>>
>> Thread 1 performed 250000 iterations of the loop.
>>
>>  
>>
>> I then tried an MPIR version:
>>
>>                 int i, nloops, thread_id=0, N = 1000000; 
>>
>>                 mpf_t a, b; mpf_inits(a, b, 0);
>>
>>  
>>
>>                 #pragma omp parallel private(thread_id, nloops, a, b)        
>>                          
>>
>>
>>                 {                                             
>>
>>                                 mpf_set_d(a, 0.0);
>>
>>                                mpf_set_d(b, 1.0);
>>
>>  
>>
>>                 #pragma omp for            
>>
>>                                for (i=0; i<N; i++) {
>>
>>                                                 mpf_add(a, a, b);
>>
>>                                }
>>
>>                                thread_id = omp_get_thread_num();
>>
>>                                gmp_printf("Thread %d performed %.*Ff 
>> iterations of the loop.\n", thread_id, 10, a );
>>
>>                 }
>>
>>                 mpf_clears(a, b, 0);
>>
>>  
>>
>> which compiled without errors but resulted in an error (“program … 
>> stopped working during execution”) at runtime. 
>>
>> Is it at all possible to run it in parallel with MPIR – and is there a 
>> mistake in the implementation? 
>>
>> Tests: It runs through without error if the “mpf_add” inside the “#pragma 
>> for” loop is erased and b is set not after but before the “#pragma omp 
>> parallel” statement (but not if the “mpf_add” command is erased and b is 
>> declared as above).
>>
>> I am using gcc and MinGW on a 64-bit (2 cores) Windows 7 machine.
>>
>>
>> Thanks and best regards!
>>
>>  
>>
>> -- 
>> You received this message because you are subscribed to the Google Groups 
>> "mpir-devel" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to mpir-devel+...@googlegroups.com <javascript:>.
>> To post to this group, send email to mpir-...@googlegroups.com 
>> <javascript:>.
>> Visit this group at http://groups.google.com/group/mpir-devel.
>> For more options, visit https://groups.google.com/d/optout.
>>
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"mpir-devel" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to mpir-devel+unsubscr...@googlegroups.com.
To post to this group, send email to mpir-devel@googlegroups.com.
Visit this group at http://groups.google.com/group/mpir-devel.
For more options, visit https://groups.google.com/d/optout.

Reply via email to