<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta content="text/html; charset=ISO-8859-1"
http-equiv="Content-Type">
</head>
<body bgcolor="#ffffff" text="#000000">
Dear Hong,<br>
<br>
You can get matrices here:<br>
<a class="moz-txt-link-freetext" href="http://dl.dropbox.com/u/60982984/A.dat">http://dl.dropbox.com/u/60982984/A.dat</a><br>
<a class="moz-txt-link-freetext" href="http://dl.dropbox.com/u/60982984/B.dat">http://dl.dropbox.com/u/60982984/B.dat</a><br>
<br>
I wrote simple testing application for that problem (it looks ugly,
but allows to reproduce the problem):<br>
<br>
Mat A,AT,B,C; <br>
PetscInt M,N;<br>
<br>
PetscInitialize(&argc,&args,(char *)0,help);<br>
<br>
ierr =
PetscViewerBinaryOpen(PETSC_COMM_WORLD,"A.dat",FILE_MODE_READ,&viewer);CHKERRQ(ierr);<br>
ierr = MatCreate(PETSC_COMM_WORLD,&A);CHKERRQ(ierr);<br>
ierr = MatSetType(A,MATMPIAIJ);CHKERRQ(ierr);<br>
ierr = MatLoad(A,viewer);CHKERRQ(ierr);<br>
ierr = PetscViewerDestroy(&viewer);CHKERRQ(ierr);<br>
<br>
ierr =
PetscViewerBinaryOpen(PETSC_COMM_WORLD,"B.dat",FILE_MODE_READ,&viewer);CHKERRQ(ierr);<br>
ierr = MatCreate(PETSC_COMM_WORLD,&B);CHKERRQ(ierr);<br>
ierr = MatSetType(B,MATMPIDENSE);CHKERRQ(ierr);<br>
ierr = MatLoad(B,viewer);CHKERRQ(ierr);<br>
ierr = PetscViewerDestroy(&viewer);CHKERRQ(ierr);<br>
<br>
MatGetSize(A,&M,&N);<br>
MatCreateMPIAIJ(PETSC_COMM_WORLD, PETSC_DECIDE, PETSC_DECIDE, N,
M, 12, PETSC_NULL, 12, PETSC_NULL, &AT);<br>
<br>
MatTranspose(A,MAT_IGNORE_MATRIX,&AT);<br>
MatMatMult(AT,B,MAT_INITIAL_MATRIX,PETSC_DEFAULT,&C);<br>
<br>
ierr =
PetscViewerBinaryOpen(PETSC_COMM_WORLD,"C.dat",FILE_MODE_WRITE,&viewer);CHKERRQ(ierr);<br>
ierr =
PetscViewerSetFormat(viewer,PETSC_VIEWER_NATIVE);CHKERRQ(ierr);<br>
ierr = MatView(C,viewer);CHKERRQ(ierr);<br>
ierr = PetscViewerDestroy(&viewer);CHKERRQ(ierr);<br>
<br>
ierr = PetscFinalize();<br>
return 0;<br>
<br>
To compare results I use following Matlab script:<br>
<br>
A = PetscBinaryRead('A.dat','complex',true);<br>
B = PetscBinaryRead('B.dat','complex',true);<br>
Cm = A.'*B;<br>
C = PetscBinaryRead('C.dat','complex',true);<br>
<br>
Matrix C is different depending on number of cores I use. <br>
My PETSc is:<br>
Using Petsc Development HG revision:
876c894d95f4fa6561d0a91310ca914592527960 HG Date: Tue Jan 10
19:27:14 2012 +0100<br>
<br>
On 06.02.2012 17:13, Hong Zhang wrote:
<blockquote
cite="mid:CAGCphBtPd87wCqeWLedRngtn=WiPWbB9N7wucDDQTjBV6JhQow@mail.gmail.com"
type="cite">MatMatMult() in petsc is not well-tested for complex -
could be buggy.
<div>Can you send us the matrices A and B in petsc binary format
for investigation?</div>
<div><br>
</div>
<div>Hong<br>
<br>
<div class="gmail_quote">On Mon, Feb 6, 2012 at 5:55 AM,
Alexander Grayver <span dir="ltr"><<a
moz-do-not-send="true"
href="mailto:agrayver@gfz-potsdam.de">agrayver@gfz-potsdam.de</a>></span>
wrote:<br>
<blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt
0.8ex; border-left: 1px solid rgb(204, 204, 204);
padding-left: 1ex;">Dear PETSc team,<br>
<br>
I try to use:<br>
call MatMatMult(A,B,MAT_INITIAL_MATRIX,PETSC_DEFAULT_DOUBLE_PRECISION,C,ierr);CHKERRQ(ierr)<br>
<br>
Where both A and B are rectangular, but A is sparse and B is
dense. Both are double complex and distributed.<br>
The product PETSc gives me contains some errors in some part
of the matrix.<br>
I output A, B and C then computed product in matlab.<br>
<br>
Attached you see figure plotted as:<br>
imagesc(log10(abs(C-Cm)))<br>
<br>
Where Cm -- product computed in matlab.<br>
<br>
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).<br>
<br>
Where should I look for possible explanation?<span
class="HOEnZb"><font color="#888888"><br>
<br>
-- <br>
Regards,<br>
Alexander<br>
</font></span></blockquote>
</div>
<br>
</div>
</blockquote>
<br>
<br>
<pre class="moz-signature" cols="72">--
Regards,
Alexander</pre>
</body>
</html>