An important issue in nested dissection (Section 2.6) and the two-dimensional matrix partitioning algorithms that we have developed (Chapters 4-5) is cal- culating vertex separators. A vertex separator is a set of vertices in a graph whose removal divides the graph into disconnected subgraphs. We will focus on the bisection case, where the separator divides the graph into two discon- nected subgraphs. In particular, we are interested in calculating balanced vertex separators, which are vertex separators that divide graphs into balanced sub- graphs. For many matrix ordering problems, this means balancing the number of vertices (or vertex weights) across the two subgraphs. However, for our two- dimensional matrix partitioning methods, we are interested in balancing the number of nonzeros, which corresponds to balancing the number of edges in the two subgraphs. In this chapter, we outline two methods for calculating balanced vertex separators. In the first method, we derive the vertex separator from an edge separator. In the second method, we use a vertex ordering package to calculate the vertex separator directly.
2.7.1
Calculating Vertex Separator from Edge Separator
In this subsection, we outline a method for calculating a balanced vertex sep- arator for a graph from a balanced edge separator for this graph. Similar to a vertex separator, an edge separator is set of edges in a graph whose removal divides the graph into disconnected subgraphs. Partitioning gives us a balanced edge separator for a graph. In particular, the edges that are cut in a partitioned graph form an edge separator. In Figure 2.25(a), the cut edges (edges cut by the dashed line) in the partitioned graph form a balanced edge separator. Thus, we can use any partitioner to obtain this edge separator. We use the PaToH hypergraph partitioner [15] in this work. In order to derive a vertex separator of a graph from an edge separator of that graph, we first find the boundary graph for the partitioned (or edge separated) graph. The boundary graph is formed by the set of vertices that are incident to a cut edge and the set of cut edges
(edge separator). Since by construction all the edges in the boundary graph are cut edges, the boundary graph of a bisection is bipartite. Figure 2.25(b) shows the bipartite boundary graph of the partitioned graph shown in Figure 2.25(a). Next, we calculate a minimum vertex cover for this boundary graph. In general, finding a minimum vertex cover for a graph is NP-hard. However, for a bipar- tite graph this problem is equivalent to finding a maximal matching (K¨onig’s Theorem) and can be solved in polynomial time with an algorithm such as the augmenting path algorithm [72]. We use a vertex cover/matching code called MatchBox [61], developed by Alex Pothen, Florin Dobrian, and Mahantesh Halappanavar. This vertex cover of the boundary graph is a vertex separator for the original graph since when these vertices are removed, all the cut edges disappear and thus we get two disconnected graphs (one with vertices in one part and the other with vertices in the other part). Figure 2.26 shows that when the vertices of the boundary graph vertex cover are removed, the original graph is separated into two balanced subgraphs.
1 2 3 4 5 6 7 8 9 Interior vertices Interior vertices
(a) Partitioned graph.
1 2 3 4 5 6 7 8 9
(b) Bipartite boundary graph with minimum vertex cover.
Figure 2.25: Using edge separator to calculate vertex separator.
Interior vertices 2 3 4 6 9 Interior vertices
Figure 2.26: Removal of vertex cover shown in Figure 2.25(b) from graph in Figure 2.25(a) yields two disconnected balanced (assuming initial partition was balanced) subgraphs. This illustrates that the vertex cover of the boundary graph is indeed a vertex separator for the original graph.
This method of calculating a balanced vertex separator has some good and bad aspects. One good aspect is that it is particularly easy with this method to obtain balanced vertex separators. The initial partitioning step does a good job of balancing nonzeros in bisection. So as long as the vertex separator is small
relative to the graph size, a balanced partition will yield a balanced vertex sep- arator. One bad aspect is that this method may yield relatively large vertex separators for some graphs, since it does not explicitly try to minimize the size of the separators. This could be especially problematic with graph partitioning, where the communication volume is being overcounted. For hypergraph parti- tioning, we would expect the better communication metric to reduce the vertex separator size, but we are still not explicitly minimizing the vertex separator size.
2.7.2
Calculating Vertex Separator Directly
There are several multilevel algorithms for sparse matrix orderings that calcu- late a nested dissection ordering and provide the vertex separator directly [43, 18]. For our work, we used the multilevel graph ordering algorithm found in Scotch [18]. It follows the basic multilevel algorithm steps outlined in Subsec- tion 2.3.4. First, the graph is iteratively coarsened until it is reasonably small (approximately 100 vertices). For the coarsest graph, this algorithm attempts to find the smallest possible balanced vertex separator using a greedy graph growing algorithm. This vertex separator is then projected up to the finer levels in the uncoarsening phase. After each step in the uncoarsening phase, a local optimization algorithm such as Fiduccia-Mattheyses [25] is applied to the fine graph of that level to refine the projected vertex separator.
In general, this method is very effective in finding small vertex separators. The major complication with this method is the difficulty of load-balancing the nonzeros in the corresponding matrix. In particular, these methods attempt to balance the number of vertices across the subdomains. This does not correctly balance the number of nonzeros when we use this method to find vertex sep- arators for sparse matrix partitioning. In order to use this method for sparse matrix partitioning, we have modified the Scotch software slightly so that it balances the number of edges instead of the number of vertices.