<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class="">Dear Hong,<div class=""><br class=""></div><div class="">Thanks for you suggestion. I have not implemented it yet as the re-distribution might involve some code changes to other part of the code, and I am not sure if that worth it. If the computation cost is mainly dominated by the distribution of the dense matrix and the efficiency won’t gain much, we might just avoid introducing this change. Currently, I printed out the nnzs owned by each processor, and the most one owns 60000 nnzs, and the least own owns 10000 nnzs, where the dimension of the matrix is 350000*350000. Do you have suggestions on the best approach?</div><div class=""><br class=""></div><div class="">Thanks,</div><div class="">Ian</div><div><br class=""><blockquote type="cite" class=""><div class=""><a href="mailto:hong@aspiritech.org" class="">hong@aspiritech.org</a> 於 2019年7月1日 21:56 寫道:</div><br class="Apple-interchange-newline"><div class=""><div dir="ltr" class=""><div dir="ltr" class="">Ian:<br class=""></div><div class="">PETSc implementation of C = A*B requires C has same row ownership as A.</div><div class="">I believe the distribution will be dominated by the dense matrices B and C, not sparse matrices A. Have you implemented C = A*B and logged performance?</div><div class="">Hong</div><div class=""><br class=""></div><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Hi,<br class="">
<br class="">
I am recently trying to do matrix multiplication for C = A*B, where A is a sparse matrix MPIAIJ, C and B are created as dense matrices MPIDENSE.<br class="">
<br class="">
In matrix A, the nonzeros are not distributed evenly across the processor, meaning that if using the default setting to let each processor own similar number of rows, the number of nonzeros owned by each processor will be significantly different. So I want to use different number of local rows for each processor. In this case, does the MPIDense matrices B and C need to be in the same row-layout as A?<br class="">
<br class="">
I mean, is something like the following is doable (A owns 3 rows and B, C own 2 rows)<br class="">
<br class="">
<br class="">
           A                    B          C<br class="">
P0  o o o o | o.         o o.       o o<br class="">
      o o o o | o          o o        o o<br class="">
      o o o o | o.    *.   -----  =   ----<br class="">
     ---------------         o o        o o<br class="">
P1  o o o o | o          o o        o o<br class="">
<br class="">
In this case, the entries can be evenly distributed for B and C thus more memory efficient.<br class="">
<br class="">
But I am not sure would this make communication more complicated thus slow down the overall wall time. How would you recommend to do? <br class="">
a) Let rows of A and B be both evenly distributed<br class="">
b) Let A have different rows layout, and B, C evenly distributed <br class="">
c) Let A have different rows layout, and B, C follow A<br class="">
<br class="">
Or maybe other better way that I did not think about.<br class="">
<br class="">
Thanks a lot for your help, <br class="">
Ian</blockquote></div></div>
</div></blockquote></div><br class=""></body></html>