parallel matrix multiplication ATA

Barry Smith bsmith at
Mon Dec 7 15:01:29 CST 2009

    First, change your code to use a call to MatPtAPSymbolic()  
followed by a call to MatPtAPNumeric() and run (using PETSc ./ 
configured with the option --with-debugging=0) with the flag -info and  
save all the output to a file. Then search that file for the string  
"Use MatPtAP", from this you will find the best fill factor.

  The run it a second time with the option -log_summary and that "best  
fill factor" A table will be printed, look at how much time in the  
table is devoted to the symbolic and numeric part of the product and  
the flop rate to see if it looks reasonable. Feel free to send that  
out to petsc-maint at and from that we can conjecture if  
there is a way to speed it up enough to make ti worth new codeing.


On Dec 7, 2009, at 12:58 PM, Lukasz Kaczmarczyk wrote:

> Hello,
> I have to multiply rectangular parallel matrix A by its transpose  
> (ATA). Matrix A is computed as result of some non standard hybrid  
> approximation method. Columns of the matrix are associated with  
> tetrahedral faces, rows are associated with tetrahedral. In order to  
> compute elements of matrix A interprocess communication is not  
> needed. In addition faces are shared maximally with two processes,  
> faces can have only two neighbour elements.
> I have created matrix A using MatCreateMPIAIJWithSplitArrays, and  
> create matrix ATA using MatPtAP which some diagonal scaling. The  
> time consuming part of my algorithm is construction of matrix ATA.   
> I looking for advice, if its worth to write own problem tailored  
> multiplication operator or is better way to speedup algorithm using  
> standard PETSc functions.
> I looking forward for any advice.
> Kind regards,
> Lukasz

More information about the petsc-users mailing list