Problem using MatView

Matthew Knepley knepley at gmail.com
Thu Dec 7 09:24:36 CST 2006


Yes, the implementation is very bad. It assembles the whole matrix on process 0
before viewing. It is intended for very small matrices only. Fixing would entail
rewriting the X viewer to take pieces of the matrix at a time. This is
a low priority for
us now, but we would gladly accept contributed code.

  Thanks,

    Matt

On 12/7/06, Cristiano Calonaci <c.calonaci at cineca.it> wrote:
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
>
> Hi,
>
>         I'm trying to plot using X a sparse matrix of order 100.000, with
> about 7.000.000 not zero elements using
>
>       ierr = PetscViewerDrawOpen(PETSC_COMM_WORLD, NULL, "matrix ATA",
> PETSC_DECIDE, PETSC_DECIDE, PETSC_DECIDE, PETSC_DECIDE, &ataviewer);
> CHKERRQ(ierr);
> ......
>       ierr = MatView(ATA, ataviewer); CHKERRQ(ierr);
>
> When I run with one processors all is ok (fast plot), when I run with more
> processors, for examples 2, the time need to plot becomes infinite.
>
> Using gdb I fount that processors zero is always memcpying,
>
> #0  0x0000002a96a1b6c6 in memcpy () from /lib64/tls/libc.so.6
> #1  0x00000000009cd6ff in PetscMemcpy (a=0x2a9c88f200, b=0x2a9c50b200,
> n=1362576) at memc.c:102
> #2  0x00000000005f29af in MatSetValues_MPIAIJ (mat=0xdec4c0, m=1,
> im=0x7fbfffe5fc, n=121, in=0x2a9a420328, v=0x2a9758c450,
> addv=INSERT_VALUES) at mpiaij.c:187
> #3  0x000000000052fe23 in MatSetValues (mat=0xdec4c0, m=1,
> idxm=0x7fbfffe5fc, n=121, idxn=0x2a9a420328, v=0x2a9758c450,
> addv=INSERT_VALUES) at matrix.c:826
> #4  0x00000000005fe647 in MatView_MPIAIJ_ASCIIorDraworSocket
> (mat=0xdbaa50, viewer=0xd78c90) at mpiaij.c:957
> #5  0x00000000005ff229 in MatView_MPIAIJ (mat=0xdbaa50, viewer=0xd78c90)
> at mpiaij.c:1005
> #6  0x000000000052cfa8 in MatView (mat=0xdbaa50, viewer=0xd78c90) at
> matrix.c:549
>
> here (frame #4) in the MatSetValues
>
>     /* This is just a temporary matrix, so explicitly using MATMPIAIJ is
> probably best */
>     ierr = MatSetType(A,MATMPIAIJ);CHKERRQ(ierr);
>     ierr =
> MatMPIAIJSetPreallocation(A,0,PETSC_NULL,0,PETSC_NULL);CHKERRQ(ierr);
>     ierr = PetscLogObjectParent(mat,A);CHKERRQ(ierr);
>
>     /* copy over the A part */
>     Aloc = (Mat_SeqAIJ*)aij->A->data;
>     m = aij->A->rmap.n; ai = Aloc->i; aj = Aloc->j; a = Aloc->a;
>     row = mat->rmap.rstart;
>     for (i=0; i<ai[m]; i++) {aj[i] += mat->cmap.rstart ;}
>     for (i=0; i<m; i++) {
>       ierr =
> MatSetValues(A,1,&row,ai[i+1]-ai[i],aj,a,INSERT_VALUES);CHKERRQ(ierr);
>       row++; a += ai[i+1]-ai[i]; aj += ai[i+1]-ai[i];
>     }
>
> I think the problem is a lot of MatSetValues without preallocation
> (ierr =
> MatMPIAIJSetPreallocation(A,0,PETSC_NULL,0,PETSC_NULL);CHKERRQ(ierr);),
> isn't it ? There is a solution ?
>
>                 Thaks a lot
>
>                                 Cristiano
> - --
> ______________________________________________________________________
>
> "Un programma di computer fa quello che gli dici, non quello che vuoi"
>                                                  Terza legge di Greer
> ______________________________________________________________________
>
> Cristiano Calonaci - Supercomputing Group - CINECA
> Via Magnanelli 6/3 - 40033 Casalecchio di Reno - Bologna - Italy
> Tel.+39-0516171421 - Fax.+39-0516137273 - e-mail: c.calonaci at cineca.it
> -----BEGIN PGP SIGNATURE-----
> Version: GnuPG v1.4.1 (GNU/Linux)
> Comment: Using GnuPG with Thunderbird - http://enigmail.mozdev.org
>
> iD8DBQFFeC5Hvt08LyoFZwMRAjD8AJ4kp8FPo0kdgbLLg1l6sfjf/AAihQCfewSs
> 06+THVFfozPmQi4Ro5um4zM=
> =6A1q
> -----END PGP SIGNATURE-----
>
>


-- 
"Failure has a thousand explanations. Success doesn't need one" -- Sir
Alec Guiness




More information about the petsc-users mailing list