[petsc-users] using OpenMP in PETSc

Xiangdong Liang xdliang at gmail.com
Wed Mar 14 13:33:21 CDT 2012


On Tue, Mar 13, 2012 at 5:57 PM, Matthew Knepley <knepley at gmail.com> wrote:
> On Tue, Mar 13, 2012 at 4:39 PM, Xiangdong Liang <xdliang at gmail.com> wrote:
>>
>> Hello everyone,
>>
>> Can someone provide me advice on using OpenMP in PETSc? I am solving a
>> problem like this:
>>
>> int main()
>> {
>>  vec vsum;
>>
>>  for(i=0; i< N; i++)
>>    {
>>      vec vi;
>>      fcomputev(i, vi);
>>      VecAXPY(vsum, 1.0, vi); // vsum +=vi;
>>    }
>>
>> }
>>
>> Can I use OpenMP "omp parallel for" to do the loop in parallel? For
>> example, suppose I have 8 processes.   It would be nice if each petsc
>> subrountine fcomputev uses 2 processes while 4 different i's are
>> computed in parallel (since different i's are independent).
>
>
> PETSc is not threadsafe. This is trivial to do in MPI where the comm for eah
> Vec is a group of 2 procs.

Do you mean the use of MPI_Reduce? If I use MPI_Reduce, should I
convert the Vec objects into regular array by vecgetarray first, then
apply the MPI_Op (MPI_SUM) on these arrays? Is there any way to
circumvent this vec-arrary converting by define MPI_Op and
MPI_datatype on Vec ?


Another quick question, where can I find the implementation of vec
ops?  For example, In petscvec.h, VecAXPY is implemented like
(*y->ops->axpy)(y,alpha,x).  Can you point me to the implementation of
methods ops->axpy?

Thanks.
Xiangdong



>
>   Matt
>
>>
>> Any helps or hints on this would be appreciated.
>>
>> Best,
>> Xiangdong
>
>
>
>
> --
> What most experimenters take for granted before they begin their experiments
> is infinitely more interesting than any results to which their experiments
> lead.
> -- Norbert Wiener


More information about the petsc-users mailing list