1#ifndef BP_MAXIMUM_MATCHING_H
2#define BP_MAXIMUM_MATCHING_H
4#include "CombBLAS/CombBLAS.h"
25template <
class IT,
class DER>
48 for(
typename std::vector<IT>::size_type i=0; i< (
unsigned)
locvec; ++i)
83 copy(rowid[i].begin(), rowid[i].end(),
senddata+sdispls[i]);
84 std::vector<IT>().swap(rowid[i]);
90 copy(colid[i].begin(), colid[i].end(),
senddata+sdispls[i]);
91 std::vector<IT>().swap(colid[i]);
96 std::tuple<IT,IT,bool> *
p_tuples =
new std::tuple<IT,IT,bool>[
p_nnz];
106 int my_proccol =
ri.
commGrid->GetRankInProcRow();
128template <
typename IT>
138 while(
col.getnnz()!=0)
143 [](
IT root,
IT parent){
return parent;},
144 [](
IT root,
IT parent){
return true;},
167template <
typename IT>
190 for(
IT i=0; i<
leaves.LocArrSize(); i++)
230template <
typename IT,
typename NT,
typename DER>
259 std::vector<std::vector<double> >
timing;
260 std::vector<int> layers;
417 layers.push_back(
layer);
433 std::cout <<
"****** maximum matching runtime ********\n";
434 std::cout << std::endl;
435 std::cout <<
"========================================================================\n";
436 std::cout <<
" BFS Search \n";
437 std::cout <<
"===================== ==================================================\n";
438 std::cout <<
"Phase Layer Match SpMV EWOpp CmUqL Prun CmMC BFS Aug Total\n";
439 std::cout <<
"===================== ===================================================\n";
443 for(
int i=0; i<
timing.size(); i++)
456 std::cout <<
"-----------------------------------------------------------------------\n";
457 std::cout <<
"Phase Layer UnMat SpMV EWOpp CmUqL Prun CmMC BFS Aug Total \n";
458 std::cout <<
"-----------------------------------------------------------------------\n";
475 std::cout <<
"***Final Maximum Matching***\n";
476 std::cout <<
"***Total-Rows Matched-Rows Total Time***\n";
479 std::cout <<
"-------------------------------------------------------\n\n";
std::shared_ptr< CommGrid > commGrid
void AugmentPath(FullyDistVec< IT, IT > &mateRow2Col, FullyDistVec< IT, IT > &mateCol2Row, FullyDistVec< IT, IT > &parentsRow, FullyDistVec< IT, IT > &leaves)
void maximumMatching(SpParMat< IT, NT, DER > &A, FullyDistVec< IT, IT > &mateRow2Col, FullyDistVec< IT, IT > &mateCol2Row, bool prune=true, bool randMM=false, bool maximizeWeight=false)
void AugmentLevel(FullyDistVec< IT, IT > &mateRow2Col, FullyDistVec< IT, IT > &mateCol2Row, FullyDistVec< IT, IT > &parentsRow, FullyDistVec< IT, IT > &leaves)
SpParMat< IT, bool, DER > PermMat(const FullyDistVec< IT, IT > &ri, const IT ncol)