[petsc-dev] MatMatMult gives different results

Alexander Grayver agrayver at gfz-potsdam.de
Tue Feb 7 11:44:28 CST 2012


On 07.02.2012 18:17, Hong Zhang wrote:
> Alexander :
>
>>
>>           MatCreateMPIAIJ(PETSC_COMM_WORLD, PETSC_DECIDE,
>>         PETSC_DECIDE, N, M, 12, PETSC_NULL, 12, PETSC_NULL, &AT);
>>           MatTranspose(A,MAT_IGNORE_MATRIX,&AT);
>>
>>
>>     should be replaced with
>>     MatTranspose(A,MAT_INITIAL_MATRIX,&AT);
>     Hm, it seems this was the reason...
>
> With this change, do you still get different matrix product comparing 
> with Matlab's?
> I'll add an error flag in petsc to prevent using 
>  MatTranspose(A,MAT_IGNORE_MATRIX,&AT).

Hong,

There is something I didn't get yet, I hope you could clarify it.

So, when I use flag MAT_INITIAL_MATRIX in test program it works fine.
If I put this flag in my original program I get dozens of exceptions like:
[42]PETSC ERROR: Argument out of range!
[42]PETSC ERROR: New nonzero at (1336,153341) caused a malloc!

I changed this flag to MAT_REUSE_MATRIX and exceptions disappeared, but 
result is incorrect again (same as for MAT_IGNORE_MATRIX)
I tried test program with MAT_REUSE_MATRIX and it also gives different 
matrix product.

Since there is no description of MatReuse structure for MatTranspose 
it's a bit confusing what to expect from it.

>>
>>     Do you mean 'Cm = A'*B;'?
>>     'Cm = A.'*B;' gives component-wise matrix product, not matrix
>>     product.
>
>     .' operator means non-Hermitian transpose. That is what I get with
>     MatTranspose (in contrast with MatHermitianTranspose)
>     component-wise matrix product would be .*
>
> You are correct.
>
> Hong
>
>
>
>>
>>     Hong
>>
>>         C = PetscBinaryRead('C.dat','complex',true);
>>
>>         Matrix C is different depending on number of cores I use.
>>         My PETSc is:
>>         Using Petsc Development HG revision:
>>         876c894d95f4fa6561d0a91310ca914592527960  HG Date: Tue Jan 10
>>         19:27:14 2012 +0100
>>
>>
>>         On 06.02.2012 17:13, Hong Zhang wrote:
>>>         MatMatMult() in petsc is not well-tested for complex - could
>>>         be buggy.
>>>         Can you send us the matrices A and B in petsc binary format
>>>         for investigation?
>>>
>>>         Hong
>>>
>>>         On Mon, Feb 6, 2012 at 5:55 AM, Alexander Grayver
>>>         <agrayver at gfz-potsdam.de <mailto:agrayver at gfz-potsdam.de>>
>>>         wrote:
>>>
>>>             Dear PETSc team,
>>>
>>>             I try to use:
>>>             call
>>>             MatMatMult(A,B,MAT_INITIAL_MATRIX,PETSC_DEFAULT_DOUBLE_PRECISION,C,ierr);CHKERRQ(ierr)
>>>
>>>             Where both A and B are rectangular, but A is sparse and
>>>             B is dense. Both are double complex and distributed.
>>>             The product PETSc gives me contains some errors in some
>>>             part of the matrix.
>>>             I output A, B and C then computed product in matlab.
>>>
>>>             Attached you see figure plotted as:
>>>             imagesc(log10(abs(C-Cm)))
>>>
>>>             Where Cm -- product computed in matlab.
>>>
>>>             The pattern and amplitude vary depending on the number
>>>             of cores I use. This picture is obtained for 48 cores
>>>             (I've tried 12, 64 cores as well).
>>>
>>>             Where should I look for possible explanation?
>>>
>>>             -- 
>>>             Regards,
>>>             Alexander
>>>
>>>
>>
>>
>>         -- 
>>         Regards,
>>         Alexander
>>
>>
>
>
>     -- 
>     Regards,
>     Alexander
>
>


-- 
Regards,
Alexander

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-dev/attachments/20120207/a4ba50ab/attachment.html>


More information about the petsc-dev mailing list