Re: [petsc-dev] MatMatMult gives different results
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).
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 < [email protected]> 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
participants (1)
-
Hong Zhang