METIS icon indicating copy to clipboard operation
METIS copied to clipboard

Segfault while parting graph with extreme edge-weight ratios

Open starbucksDave opened this issue 1 year ago • 1 comments

This small(ish) sample segfaults while parting a graph with rather extreme edge-weight ratios. The smallest weight is 1 and the largest is 55. If we make the ratio smaller, e.g. by bumping all the weights from 1 to 4 Metis manages to part the graph just fine. main.cpp.txt

Metis starts off by performing a few RecursiveBisections on the graph. After doing this a couple of times we get a small graph of 6 vertices and 16 adjacencies. xadj : +0 +3 +6 +9 +11 +12 +15 adjncy : +3 +1 +5 +0 +2 +5 +5 +1 -33686019 +0 +4 +3 +1 +0 +2 +1 adjwgt : +21 +32 +6 +32 +43 +28 +8 +57 +12 +21 +23 +23 +28 +22 +42 +28

It then tries to access the something on location -33686019

Here is the callstack

>	test.exe!libmetis__Compute2WayPartitionParams(ctrl_t * ctrl, graph_t * graph) Line 120	C
 	test.exe!libmetis__GrowBisection(ctrl_t * ctrl, graph_t * graph, float * ntpwgts, int niparts) Line 292	C
 	test.exe!libmetis__Init2WayPartition(ctrl_t * ctrl, graph_t * graph, float * ntpwgts, int niparts) Line 48	C
 	test.exe!libmetis__MultilevelBisect(ctrl_t * ctrl, graph_t * graph, float * tpwgts) Line 245	C
 	test.exe!libmetis__MlevelRecursiveBisection(ctrl_t * ctrl, graph_t * graph, int nparts, int * part, float * tpwgts, int fpart) Line 183	C
 	test.exe!libmetis__MlevelRecursiveBisection(ctrl_t * ctrl, graph_t * graph, int nparts, int * part, float * tpwgts, int fpart) Line 207	C
 	test.exe!libmetis__MlevelRecursiveBisection(ctrl_t * ctrl, graph_t * graph, int nparts, int * part, float * tpwgts, int fpart) Line 207	C
 	test.exe!libmetis__MlevelRecursiveBisection(ctrl_t * ctrl, graph_t * graph, int nparts, int * part, float * tpwgts, int fpart) Line 207	C
 	test.exe!libmetis__MlevelRecursiveBisection(ctrl_t * ctrl, graph_t * graph, int nparts, int * part, float * tpwgts, int fpart) Line 209	C
 	test.exe!libmetis__MlevelRecursiveBisection(ctrl_t * ctrl, graph_t * graph, int nparts, int * part, float * tpwgts, int fpart) Line 207	C
 	test.exe!METIS_PartGraphRecursive(int * nvtxs, int * ncon, int * xadj, int * adjncy, int * vwgt, int * vsize, int * adjwgt, int * nparts, float * tpwgts, float * ubvec, int * options, int * objval, int * part) Line 133	C
 	test.exe!libmetis__InitKWayPartitioning(ctrl_t * ctrl, graph_t * graph) Line 200	C
 	test.exe!libmetis__MlevelKWayPartitioning(ctrl_t * ctrl, graph_t * graph, int * part) Line 127	C
 	test.exe!METIS_PartGraphKway(int * nvtxs, int * ncon, int * xadj, int * adjncy, int * vwgt, int * vsize, int * adjwgt, int * nparts, float * tpwgts, float * ubvec, int * options, int * objval, int * part) Line 74	C
 	test.exe!main() Line 107	C++
 	[External Code]	

starbucksDave avatar Aug 17 '23 10:08 starbucksDave

your adjncy format is incorrect - the elements in adjncy are adjacent vertices. Your adjncy says that vertex 2 has an edge to vertex -33686019.

gfaster avatar Sep 22 '23 19:09 gfaster