<div dir="ltr">Thanks Mark. It is true that partitioning is NP-complete but its a bit strange to get result worse than initial numbering. I mean you could at the very least always compare against initial numbering and if its worse just use that one!  I think that&#39;s what I&#39;m gonna add to my own code then. <div>

<br></div><div>Anyways, as long as its a not a bug in my code, i&#39;m happy. </div><div><br></div><div>Thanks for the help <br><br><div class="gmail_quote">On Thu, Feb 16, 2012 at 4:03 PM, Mark F. Adams <span dir="ltr">&lt;<a href="mailto:mark.adams@columbia.edu" target="_blank">mark.adams@columbia.edu</a>&gt;</span> wrote:<br>


<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word"><br><div><div><div><div>On Feb 16, 2012, at 5:06 PM, Mohammad Mirzadeh wrote:</div>
<br><blockquote type="cite"><div dir="ltr">Thanks everyone for participating in the discussion. I really appreciate it. I guess I&#39;m gonna describe the problem more in details here. So basically I use parmetis to partition my quadtree grid (we have previously talked about why i&#39;m not using p4est right now). Please see figures for a sample amr quadtree grid.<div>




<br></div><div>For most cases, the partition quality that I get is reasonable like the one for the smaller grid (maximum level of amr = 4) where I have color-coded the grid points according to their proc_id (0, 1, 2 and 3) , both before and after the partitioning. In this case, the program tells me that:</div>




<div><br></div><div><div>[0] # of edge cuts: 35</div><div>[1] # of edge cuts: 35</div><div>[2] # of edge cuts: 35</div><div>[3] # of edge cuts: 35</div><div>[0] Before: # of ghost Nodes: 35 </div><div>[1] Before: # of ghost Nodes:  29 </div>




<div>[2] Before: # of ghost Nodes:  35 </div><div>[3] Before: # of ghost Nodes:  23 </div><div>[0] After: # of ghost Nodes:  17 </div><div>[1] After: # of ghost Nodes:  20 </div><div>[2] After: # of ghost Nodes:  17 </div>




<div>[3] After: # of ghost Nodes:  16 </div></div><div><br></div><div>Now, the partitioning is quite good and number of ghost points required have been dropped after partitioning is applied. However, if i run the code for a larger grid (maximum amr level = 8), the partitioning that I get is actually worse than the initial numbering i started with (well at least for proc 0, 1, 2)</div>




<div><br></div><div><div>[0] # of edge cuts: 67</div><div>[1] # of edge cuts: 67</div><div>[2] # of edge cuts: 67</div><div>[3] # of edge cuts: 67</div><div>[0] Before: # of ghost Nodes:  58 </div><div>[1] Before: # of ghost Nodes:  67 </div>




<div>[2] Before: # of ghost Nodes:  62 </div><div>[3] Before: # of ghost Nodes:  44 </div><div>[0] After: # of ghost Nodes:  103 </div><div>[1] After: # of ghost Nodes:  115 </div><div>[2] After: # of ghost Nodes:  81 </div>




<div>[3] After: # of ghost Nodes:  28 </div></div><div><br></div><div>as you can see for proc 0, 1, and 2 the number of required ghost points have been doubled which means more communication. To me, this should not happen (maybe i&#39;m wrong here?). </div>


</div></blockquote><div><br></div></div></div><div>Partitioning is an NP-something problem, ie, you do not get the optimal solution in reasonable time.  If you give ParMetis the optimal initial partitioning it will ignore it and just run its algorithm and give you, in general, a sub-optimal solution.  It does not check that the initial partition was better than what it produced.  So you _can_ get a worse partitioning out of ParMetis then what you gave it.</div>


<div><br></div><div>Mark</div><br><blockquote type="cite"><div><div><div dir="ltr"><div>That&#39;s why i asked if minimizing edge cuts does not translate to having fewer ghost points. </div>

<div><br></div><div>Does minimizing latency favors creating &#39;clustered chunks&#39; of points for each processor and if so, could that create a partitioning with more ghost points? </div><div><br></div><div>One final point, I&#39;m not sure how parmetis is calculating the edge cuts, but if you simply count the number of cuts in the smaller graphs, you don&#39;t get the reported numbers. why is that? (for instance proc 3, cuts 20 edges, including extra &#39;diagonal&#39; ones at the coarse-fine interfaces but parmetis reports 35-- i can explain this more in details if needed)</div>




<div><br></div><div>thanks,</div><div>Mohammad</div><div><br></div><div><br><div><br></div><div><br><br><div class="gmail_quote">On Thu, Feb 16, 2012 at 6:21 AM, Mark F. Adams <span dir="ltr">&lt;<a href="mailto:mark.adams@columbia.edu" target="_blank">mark.adams@columbia.edu</a>&gt;</span> wrote:<br>




<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word"><br><div><div><div><div>On Feb 16, 2012, at 8:46 AM, Matthew Knepley wrote:</div>

<br><blockquote type="cite">On Thu, Feb 16, 2012 at 7:43 AM, Gerard Gorman <span dir="ltr">&lt;<a href="mailto:g.gorman@imperial.ac.uk" target="_blank">g.gorman@imperial.ac.uk</a>&gt;</span> wrote:<br><div class="gmail_quote">




<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Matthew Knepley emailed the following on 16/02/12 13:29:<br>
&gt; On Thu, Feb 16, 2012 at 3:38 AM, Mohammad Mirzadeh &lt;<a href="mailto:mirzadeh@gmail.com" target="_blank">mirzadeh@gmail.com</a><br>
&gt; &lt;mailto:<a href="mailto:mirzadeh@gmail.com" target="_blank">mirzadeh@gmail.com</a>&gt;&gt; wrote:<br>
&gt;<br>
&gt;     Hi guys,<br>
&gt;<br>
&gt;     I&#39;m wondering if there is any implementation<br>
&gt;     for ParMETIS_V3_PartGeomKway()? All I can find is the<br>
&gt;     implementation for ParMETIS_V3_PartKway and I&#39;m wondering if<br>
&gt;     including the vertex positions could help me get a better<br>
&gt;     partitioning?<br>
&gt;<br>
&gt;<br>
&gt; As far as communication goes, it will not help.<br>
&gt;<br>
&gt;<br>
&gt;     Also I have a general question. Is minimizing number of edge cuts<br>
&gt;     essentially the same as minimizing communication? I understand<br>
&gt;     that they are related, but communication is proportional to the<br>
&gt;     number of ghost points which is not exactly equal (its actually<br>
&gt;     less than) to the number of edge cuts. So then is it possible that<br>
&gt;     this could actually result in larger number of ghost points, at<br>
&gt;     least for some of processors?<br>
&gt;<br>
&gt;<br>
&gt; It of course depends on your problem and the graph you draw, but you<br>
&gt; can always draw a graph<br>
&gt; where the edge cut is exactly your communication.<br>
&gt;<br>
&gt;<br>
<br>
<br>
It might also be interesting to look at Zoltan&#39;s hypergraph partitioning<br>
which can better balance communications -<br>
<a href="http://www.cs.sandia.gov/zoltan/dev_html/dev_phg.html" target="_blank">http://www.cs.sandia.gov/zoltan/dev_html/dev_phg.html</a></blockquote><div><br></div><div>I would caution you that one thing people are rarely careful about is quantifying the effect of</div>





<div>latency vs communication volume. I would bet you $10 that the lion&#39;s share of slow down is</div><div>due to load imbalance/latency rather than communication volume (since comm links are so</div><div>big).</div><div>





<br></div></div></blockquote><div><br></div></div></div><div>Just to add, edge cuts are a good proxy for communication volume on PDE graphs, IMO, but they are not the same and I applaud Zoltan for optimizing this directly.  Both edge cuts and #ghosts are decent metrics to indirectly minimize number of partition neighbors (latency).   As Matt says this is probably what you want to minimize, assuming good load balance.  </div>




<div><br></div><div>Furthermore you don&#39;t really want to minimize any of these.  What you want to minimize is the maximum cuts/neighbors/load of an any partition -- that is load balance (max/optimal).</div><span><font color="#888888"><div>




<br></div><div>Mark</div></font></span><div><br><blockquote type="cite"><div class="gmail_quote"><div>   Matt</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">




<br>
Cheers<br>
<span><font color="#888888">Gerard<br>
<br>
</font></span></blockquote></div><br><br clear="all"><div><br></div>-- <br>What most experimenters take for granted before they begin their experiments is infinitely more interesting than any results to which their experiments lead.<br>





-- Norbert Wiener<br>
</blockquote></div></div><br></div></blockquote></div><br></div></div></div>
</div></div><span>&lt;new_4_1.jpg&gt;</span><span>&lt;old_4_1.jpg&gt;</span><span>&lt;old_8_1.jpg&gt;</span><span>&lt;new_8_1.jpg&gt;</span></blockquote></div><br></div></blockquote></div><br></div></div>