[Users] Generalising to OpenMP

Chris Stevens c.stevens at ru.ac.za
Wed Mar 28 03:24:04 CDT 2018

Hi everyone,

I am new to OpenMP programming, and have quickly come across an (I 
think) interesting task that I want to parallelise with OpenMP that does 
not seem straightforwardly generalisable. I would like to hear your 
feedback on the potential solutions and whether there is a better way to 
do it:

Task: Create a scratch array, say of CCTK_REAL, during an initialisation 
phase that is shared with other code using a header file. This array is 
defined only once. This scratch array is then used as temporary storage 
space in a function that does some computation within a for loop. i.e.

function blah ()


     for (....)


         computation involving scratch array



This works fine when OpenMP is turned off. However when you add to the 
for loop above #pragma omp parallel for, then one sees that this one 
scratch array will be being used by multiple threads at once, thus 
causing issues.

Solution 1: Each thread has its own scratch space. I am not sure if it 
is within the OpenMP paradigm to create scratch spaces for each thread 
within the initialisation file, and share them through a header. This 
doesn't seem to work and I am thinking this shouldn't be possible?

Solution 2: Create one serial scratch space during initialisation that 
has size dependent on omp_get_num_threads(). One would then have to 
change the computation involving the scratch array to be dependent on 
omp_get_thread_num() so as to use its allocated part of the scratch space.

Solution 3: One could do something like

#pragma omp parallel


     create scratch space

     #pragma omp parallel for



         computation involving thread specific scratch space



In summary: Solution 1 doesn't seem to work and probably doesn't fit 
into the OpenMP paradigm. Solution 2 would work but doesn't seem very 
nice. Solution 3 is nicer but inefficient as I don't want to be creating 
scratch spaces all the time.

Is there perhaps another way that fits better with the OpenMP paradigm?

Many thanks!


Dr Chris Stevens

Claude Leon Postdoctoral Fellow

Department of Mathematics

Rhodes University

Room 5

Ph: +27 46 603 8932

Web: www.chrisdoesmaths.com <http://www.chrisdoesmaths.com>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.einsteintoolkit.org/pipermail/users/attachments/20180328/6c03a832/attachment-0001.html 

More information about the Users mailing list