[petsc-dev] multiple VecGetArray
Barry Smith
bsmith at mcs.anl.gov
Tue Aug 31 12:20:12 CDT 2010
On Aug 31, 2010, at 1:07 PM, Jed Brown wrote:
> On Tue, 31 Aug 2010 11:21:02 -0300, Lisandro Dalcin <dalcinl at gmail.com> wrote:
>> Calling VecGetArray multiple times on the same vec seems to work (at
>> least for native vectors). However, in VecSeq impl there is code to
>> prevent such usage. What's the correct usage?
>
> I think that correct usage should not allow multiple access to the same
> vector, so that VecGetArray implies exclusive access.
This was the intention. Only one writer could access at a time (several can use VecGetArrayRead() at the same time but there cannot be a writer at the same time). The code that generated an error with multiple access dissolved over time leaving that one useless fragment in the VecGetArray_Seq() which is not used. It would be nice if it was put back in (note by putting the flag into the _p_Vec structure you don't need a function call to do the error checking).
Barry
> I think PETSc is
> consistent about this internally and it just doesn't check for native
> vectors to avoid a function call.
>
> VecGetArray(X,&x);
> VecGetArray(X,&y);
> FunctionAssumingNoAliasing(x,y);
> VecRestoreArray(X,&x); /* Is it safe to free buffer/move to GPU? */
> y[0] = 2.; /* If so, then this line is invalid. */
>
> Jed
More information about the petsc-dev
mailing list