[petsc-dev] Segmentation faults in MatMatMult & MatTransposeMatMult

Dave May dave.mayhem23 at gmail.com
Tue Jan 15 03:24:09 CST 2019


On Tue, 15 Jan 2019 at 09:16, Pierre Jolivet <pierre.jolivet at enseeiht.fr>
wrote:

>
> On 15 Jan 2019, at 10:01 AM, Dave May <dave.mayhem23 at gmail.com> wrote:
>
>
>
> On Tue, 15 Jan 2019 at 08:50, Pierre Jolivet <pierre.jolivet at enseeiht.fr>
> wrote:
>
>> OK, I was wrong about MATAIJ, as Jed already pointed out.
>> What about BAIJ or Dense matrices?
>>
>
> The preallocation methods for BAIJ and Dense both internally use
> PetscTryMethod.
>
>
> I don’t see any MatDenseSetPreallocation in master, what are you referring
> to please?
>

I was referring to the fact that you can safely call these preallocation
routines together

MatSeqBAIJSetPreallocation
MatMPIBAIJSetPreallocation
MatSeqDenseSetPreallocation
MatMPIDenseSetPreallocation

and they will only take effect if the comm size and matrix type matches
what the API expects.



>
>
>
>> What about VecCreateMPIWithArray which seems to explicitly call VecCreate_MPI_Private
>> which explicitly sets the type to VECMPI
>> https://www.mcs.anl.gov/petsc/petsc-current/src/vec/vec/impls/mpi/pbvec.c.html#line522 so
>> that I cannot do a MatMult with a MATAIJ with a communicator of size 1?
>>
>
> That looks problematic.
>
> Possibly there should either be an if statement in VecCreateMPIWithArray()
> associated with the comm size, or there should be a new API
> VecCreateWithArray() with the same args as VecCreateMPIWithArray.
>
> As a work around, you could add VecCreateWithArray() in your code base
> which does the right thing.
>
>
> Sure, I can find a workaround in my code, but I’m still thinking it is
> best not to have PETSc segfaults when a user is doing something they are
> allowed to do :)
>

Sure - it was just a pragmatic suggestion to provide a short time fix /
hack.



>
> Thanks,
> Pierre
>
>
>
>>
>> Thanks,
>> Pierre
>>
>> On 15 Jan 2019, at 9:40 AM, Dave May <dave.mayhem23 at gmail.com> wrote:
>>
>>
>>
>> On Tue, 15 Jan 2019 at 05:18, Pierre Jolivet via petsc-dev <
>> petsc-dev at mcs.anl.gov> wrote:
>>
>>> Cf. the end of my sentence: "(I know, I could switch to SeqAIJ_SeqDense,
>>> but that is not an option I have right now)”
>>> All my Mat are of type MATMPIX. Switching to MATX here as you suggested
>>> would mean that I need to add a bunch of if(comm_size == 1)
>>> MatSeqXSetPreallocation else MatMPIXSetPreallocation in the rest of my
>>> code, which is something I would rather avoid.
>>>
>>
>> Actually this is not the case.
>>
>> If you do as Hong suggests and use MATAIJ then the switch for comm_size
>> for Seq or MPI is done internally to MatCreate and is not required in the
>> user code. Additionally, in your preallocation routine, you can call safely
>> both (without your comm_size if statement)
>> MatSeqAIJSetPreallocation()
>> and
>> MatMPIAIJSetPreallocation()
>> If the matrix type matches that expected by the API, then it gets
>> executed. Otherwise nothing happens.
>>
>> This is done all over the place to enable the matrix type to be a
>> run-time choice.
>>
>> For example, see here
>>
>> https://www.mcs.anl.gov/petsc/petsc-current/src/dm/impls/da/fdda.c.html#DMCreateMatrix_DA_3d_MPIAIJ
>> and look at lines 1511 and 1512.
>>
>> Thanks,
>>   Dave
>>
>>
>>
>>
>>
>>>
>>> Thanks,
>>> Pierre
>>>
>>> On 14 Jan 2019, at 10:30 PM, Zhang, Hong <hzhang at mcs.anl.gov> wrote:
>>>
>>> Replace
>>> ierr = MatSetType(A, MATMPIAIJ);CHKERRQ(ierr);
>>> to
>>> ierr = MatSetType(A, MATAIJ);CHKERRQ(ierr);
>>>
>>> Replace
>>> ierr = MatSetType(B, MATMPIDENSE)i;CHKERRQ(ierr);
>>> to
>>> ierr = MatSetType(B, MATDENSE)i;CHKERRQ(ierr);
>>>
>>> Then add
>>> MatSeqAIJSetPreallocation()
>>> MatSeqDenseSetPreallocation()
>>>
>>> Hong
>>>
>>> On Mon, Jan 14, 2019 at 2:51 PM Pierre Jolivet via petsc-dev <
>>> petsc-dev at mcs.anl.gov> wrote:
>>>
>>>> Hello,
>>>> Is there any chance to get MatMatMult_MPIAIJ_MPIDense  and
>>>> MatTransposeMatMult_MPIAIJ_MPIDense fixed so that the attached program
>>>> could run _with a single_ process? (I know, I could switch to
>>>> SeqAIJ_SeqDense, but that is not an option I have right now)
>>>>
>>>> Thanks in advance,
>>>> Pierre
>>>>
>>>>
>>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-dev/attachments/20190115/5f105c46/attachment.html>


More information about the petsc-dev mailing list