Program Listing for File initial.h¶
↰ Return to documentation for file (src/partition/initial.h)
#ifndef INITIAL_H
#define INITIAL_H
#include "coarsen.h"
#include "ortools/linear_solver/linear_solver.h"
#include "refine/bucket/MoveBucket.h"
#include "refine/core/RefineTypes.h"
class Initial {
private:
bool has_fix;
bool force_topo;
int multilevel_id = 0;
int max_hop;
int num_initial_solutions;
int num_best_initial_solutions;
vector<flat_hash_map<int, pair<int, double>>>
hypergraph;
void constructGraph(const graph &g);
void improvedSPFA(const graph &g, vector<int> &parts,
vector<VectorXi> upper_resources,
vector<VectorXi> &occupied_resources);
int selectInitialNodes(const graph &g, vector<int> &parts,
vector<VectorXi> upper_resources,
vector<VectorXi> &occupied_resources,
vector<int> &order);
int randomPart(const graph &g, vector<int> &parts, VectorXi upper_resources,
VectorXi lower_resources, vector<VectorXi> &occupied_resources,
int seed);
int greedyPart(const graph &g, vector<int> &parts,
vector<VectorXi> upper_resources,
vector<VectorXi> &occupied_resources, int seed);
int progressiveMinCutPart(const graph &g, vector<int> &parts,
vector<VectorXi> upper_resources,
vector<VectorXi> &occupied_resources, int seed);
double calculateGain(const graph &g, const vector<int> &parts, int vertex,
int to, int type);
int growPart(const graph &g, vector<int> &parts,
vector<VectorXi> upper_resources,
vector<VectorXi> &occupied_resources, int i, int seed);
int globalGrowPart(const graph &g, vector<int> &parts,
vector<VectorXi> upper_resources,
vector<VectorXi> &occupied_resources, int type, int seed);
int sequentialGrowPart(const graph &g, vector<int> &parts,
vector<VectorXi> upper_resources,
vector<VectorXi> &occupied_resources, int type,
int seed);
int roundRobinGrowPart(const graph &g, vector<int> &parts,
vector<VectorXi> upper_resources,
vector<VectorXi> &occupied_resources, int type,
int seed);
int initialPartitionTopo(const graph &g, const fpga &fpgas,
vector<int> &parts, vector<VectorXi> upper_resources,
vector<VectorXi> &occupied_resources, bool has_fix,
const vector<int> &fixed_assign,
vector<set<int>> candidate, int allow_hop, int i,
int seed);
public:
Initial(const PartitionConstraintConfig &constraints,
const InitialPartitionConfig &config);
int initialPartition(MultilevelCoarsener &mc, const fpga &fpgas,
vector<vector<int>> &candidate_parts,
vector<vector<VectorXi>> &candidate_occupied_resources);
bool COCP_ILP(MultilevelCoarsener &mc, const fpga &fpgas, bool has_fix,
vector<int> &candidate_parts,
vector<VectorXi> &candidate_occupied_resources);
};
#endif