<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><div style>Jed, </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
<div class="im">
><br>
> I am trying to multiply the transpose of a dense matrix(A) and a large sparse matrix(X1). That is, A^T x X1.<br>
><br></div><div class="im">
<br>
</div>Hong, do you have time to implement MatTransposeMatMult_MPIAIJ_MPIDense?<br></blockquote><div> </div><div style>He needs MatTransposeMatMult_MPIDense_MPIAIJ </div><div style>This requires huge amount of data communications among MPI processes.</div>
<div style><br></div><div style>Hong</div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
<br>
Can you create X1 as X1^T instead?<br>
<br>
If you want to keep storing X1 is you do now, you can either store it as<br>
ten vectors and use MatMultTranspose or you can pack it into one vector and use<br>
<br>
  MatCreateMAIJ(X1,10,&X1m);<br>
  MatMultTranspose(X1m,Apacked,Bpacked);<br>
<br>
This is actually a better ordering for memory bandwidth.  The MAIJ<br>
matrix does not need extra storage.<br>
</blockquote></div><br></div></div>