<div dir="ltr"><div>Jed,</div><div>I reproduced what you observed. </div><div>30x time is spent on numerical C = At*B. </div><div>We compute A^T*B using outer product C=(A^T)[:,i]*B[i,:].</div><div>For your large matrix A: rows=574902, cols=184446,</div><div>outer product takes long long time to insert values to C.</div><div><br></div><div>We may use At=A^T and C=At*B instead.</div><div><br></div><div>Hong</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Sep 21, 2017 at 9:59 AM, Hong <span dir="ltr"><<a href="mailto:hzhang@mcs.anl.gov" target="_blank">hzhang@mcs.anl.gov</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">Jed :<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">~jedbrown/ceres_solver_iterati<wbr>on_001_A.petsc on <a href="http://mcs.anl.gov" rel="noreferrer" target="_blank">mcs.anl.gov</a>.<br></blockquote><div>I got this file. How many  matrices in this file? How to load them?</div><div>It seems the first matrix is rectangular.</div><span class="HOEnZb"><font color="#888888"><div><br></div><div>Hong</div></font></span><span class=""><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
The issue is that MatTransposeMatMult is implemented using sparse outer<br>
products which is quite inefficient compared to the standard MatMatMult<br>
algorithm.<br>
<div class="m_-5917768677524930984HOEnZb"><div class="m_-5917768677524930984h5"><br>
Barry Smith <<a href="mailto:bsmith@mcs.anl.gov" target="_blank">bsmith@mcs.anl.gov</a>> writes:<br>
<br>
>   Send the runable case so that we can determine the cause of the slow down and find possible cures. It could be that the "optimized" version was optimized for a particular size of problems or matrix structure.<br>
><br>
>    Barry<br>
><br>
>> On Sep 20, 2017, at 4:32 PM, Jed Brown <<a href="mailto:jed@jedbrown.org" target="_blank">jed@jedbrown.org</a>> wrote:<br>
>><br>
>> I have a simple SeqAIJ example where MatTransposeMatMult is 30x slower<br>
>> than MatTranspose followed by MatMatMult.  This is embarrassing when<br>
>> people try to compare performance.  Are there any cases where these<br>
>> custom implementations provide value rather than just confusing people<br>
>> or turning them away from PETSc?<br>
</div></div></blockquote></span></div><br></div></div>
</blockquote></div><br></div>