コード例 #1
0
  int hpartition(const vector< set<int> > &graph, vector<int>& npartitions, int partition_method, vector<int> &decomp){

    vector<int> hdecomp;
    int edgecut = gpartition(graph, npartitions[0], partition_method, hdecomp);

    if(npartitions.size()==2){
      decomp.resize(graph.size());
      for(int i=0;i<npartitions[0];i++){
        map<int, int> renumber;
        int cnt=0;
        for(size_t j=0;j<hdecomp.size();j++){
          if(i==hdecomp[j]){
            renumber[j]=cnt++;
          }
        }

        vector< set<int> > pgraph(renumber.size());
        for(map<int, int>::const_iterator it=renumber.begin();it!=renumber.end();++it){
          for(set<int>::const_iterator jt=graph[it->first].begin();jt!=graph[it->first].end();++jt){
            if(renumber.find((*jt)-1)!=renumber.end()){
              pgraph[it->second].insert(renumber[(*jt)-1]+1);
            }
          }
        }
        
        vector<int> pdecomp, ncores(npartitions[1], 0);
        set<int> parts;
        int sedgecut = gpartition(pgraph, npartitions[1], partition_method, pdecomp);
        for(map<int, int>::const_iterator it=renumber.begin();it!=renumber.end();++it){
          ncores[pdecomp[it->second]]++;
          decomp[it->first] = hdecomp[it->first]*npartitions[1] + pdecomp[it->second];
          parts.insert(decomp[it->first]);
        }
      }
    }else{
      decomp.swap(hdecomp);
    }

    return edgecut;
  }
コード例 #2
0
ファイル: eb_sys.c プロジェクト: davekeck/eb_chan
void eb_sys_init() {
    if (!eb_sys_ncores) {
        eb_atomic_compare_and_swap(&eb_sys_ncores, 0, ncores());
    }
}