<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">Jed:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><span class="gmail-">Hong <<a href="mailto:hzhang@mcs.anl.gov">hzhang@mcs.anl.gov</a>> writes:<br>
<br>
> Jed,<br>
> I reproduced what you observed.<br>
> 30x time is spent on numerical C = At*B.<br>
> We compute A^T*B using outer product C=(A^T)[:,i]*B[i,:].<br>
> For your large matrix A: rows=574902, cols=184446,<br>
> outer product takes long long time to insert values to C.<br>
><br>
> We may use At=A^T and C=At*B instead.<br>
<br>
</span>Right.  My point is that users call MatTransposeMatMult and conclude<br>
that PETSc is super slow compared to other software.  The could call<br>
MatTranspose then MatMatMult and get fast results, but that's a sucky<br>
and confusing interface.  Is there a compelling reason to keep the outer<br>
product implementation around?  Are there any matrices for which it is<br>
competitive?<br></blockquote><div><br></div><div>It was implemented a decade ago for small to medium matrices.</div><div>Your matrix structure reveals the worst part of outer product.</div><div><br></div><div>After discussing it with Barry, we decided to replace the algorithm (not API) using At=A^T and C=At*B  for sequential implementation.</div><div>In parallel, I'll do local MatTranspose (used for PtAP).</div><div>I'll give you this new implementation in few days.</div><div><br></div><div>Hong</div><div> </div></div><br></div></div>