And is edge weights being less than 10 still valid? Although I am not getting any errors, when the elements in my matrix are larger than 10, even ParMETIS doesn't give different results.
Eda Oktay <eda.ok...@metu.edu.tr>, 30 Ağu 2020 Paz, 10:57 tarihinde şunu yazdı: > Dear Matt, > > First of all I figured out that I asked wrongly. It's not ParMETIS giving > the same result. It is CHACO. ParMETIS gives different results when I use > edge weights. > > Thanks! > > Dear Barry, > > I am trying to partition the matrix to compare the edge cuts when it is > partitioned with CHACO, ParMETIS and the spectral partitioning algorithm > with the k-means clustering (I wrote this code in PETSc). In the end, I > will conclude that if a linear system is to be solved and the coefficient > matrix is large in size, then partitioning the coefficient matrix by using > one of these algorithms will help one to solve the linear system faster and > with small communication. > > What is forcing matrix to have all positive values? Isn't it done by using > MatPartitioningGetUseEdgeWeights and MatPartitioningSetUseEdgeWeights? > > I will send the test case but I am already passing my original matrix > directly to SetAdjacency (SymmA is my symmetric matrix with positive > values): > > ierr = MatConvert(SymmA,MATMPIADJ,MAT_INITIAL_MATRIX,&AL);CHKERRQ(ierr); > > ierr = MatPartitioningCreate(MPI_COMM_WORLD,&part);CHKERRQ(ierr); > ierr = MatPartitioningSetAdjacency(part,AL);CHKERRQ(ierr); > ierr = MatPartitioningSetFromOptions(part);CHKERRQ(ierr); > > So, if ParMETIS gives different edge cut as it is expected, > MatPartitioningGetUseEdgeWeights and MatPartitioningSetUseEdgeWeights works > correctly. Why can't CHACO? > > Thanks! > > Eda > > Barry Smith <bsm...@petsc.dev>, 30 Ağu 2020 Paz, 03:00 tarihinde şunu > yazdı: > >> >> >> > On Aug 29, 2020, at 2:23 PM, Eda Oktay <eda.ok...@metu.edu.tr> wrote: >> > >> > Hi all, >> > >> > I am trying to partition a sparse matrix by using ParMETIS. I am >> converting my matrix to adjacency type and then applying partitioning. >> >> You don't need to do this. Just pass your original matrix directly into >> MatPartitioningSetAdjacency() it will handle any conversions needed. >> >> Edge weights need to be positive, since they represent how much >> communication is to take place over that link. You may need to force your >> matrix to have all positive values before giving it to >> MatPartitioningSetAdjacency and using edge weights. >> >> I this doesn't work than our code is broken, please send us a simple >> test case >> >> Question: Why are you partitioning a matrix? Is it for load balancing >> of solves or matrix vector products with the matrix? To reduce interprocess >> communication during solves or matrix vector products with the matrix? If >> so the numerical values in the matrix don't affect load balance or >> interprocess communication for these operations. >> >> >> Barry >> >> >> >> >> > Default, I understood that partitioning doesn't use edge-weights. >> However, when I used the following codes I saw from ex15 and used >> "-test_use_edge_weights 1", I am getting the same results as when I don't >> consider edge weights. >> > >> > PetscBool use_edge_weights=PETSC_FALSE; >> > >> >> PetscOptionsGetBool(NULL,NULL,"-test_use_edge_weights",&use_edge_weights,NULL); >> > if (use_edge_weights) { >> > MatPartitioningSetUseEdgeWeights(part,use_edge_weights); >> > >> > MatPartitioningGetUseEdgeWeights(part,&use_edge_weights); >> > if (!use_edge_weights) >> SETERRQ(PETSC_COMM_SELF,PETSC_ERR_ARG_INCOMP, "use_edge_weights flag does >> not setup correctly \n"); >> > } >> > >> > My matrix does not consist of 1s and 0s, so I want partitioning to >> consider all the nonzero elements in the matrix as edge weights. Don't >> MatPartitioningSetUseEdgeWeights and MatPartitioningGetUseEdgeWeights do >> that? Should I add something more? In the page of >> MatPartitioningSetUseEdgeWeights, it is written that "If set >> use_edge_weights to TRUE, users need to make sure legal edge weights are >> stored in an ADJ matrix.". How can I make sure of this? >> > >> > I am trying to compare the use of ParMETIS with the spectral >> partitioning algorithm when I used a weighted Laplacian. >> > >> > Thanks! >> > >> > Eda >> > >> >>