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

    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!

Chris

--
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>

_______________________________________________
Users mailing list
[email protected]
http://lists.einsteintoolkit.org/mailman/listinfo/users

Reply via email to