Graybat  1.1
Graph Approach for Highly Generic Communication Schemes Based on Adaptive Topologies
Consecutive.hpp
1 #pragma once
2 
3 #include <algorithm> /* std::min */
4 #include <vector> /* std::vector */
5 #include <assert.h> /* assert */
6 
7 namespace graybat {
8 
9  namespace mapping {
10 
11  struct Consecutive {
12 
13  template<typename T_Graph>
14  std::vector<typename T_Graph::Vertex> operator()(const unsigned processID, const unsigned processCount, T_Graph &graph){
15 
16  typedef typename T_Graph::Vertex Vertex;
17 
18  unsigned vertexCount = graph.getVertices().size();
19  unsigned vertexPerProcess = ceil((float)vertexCount / processCount);
20 
21  // More processes than vertices
22  if(processID > vertexCount - 1){
23  return std::vector<Vertex>();
24  }
25 
26  unsigned minVertex = processID * vertexPerProcess;
27  unsigned maxVertex = minVertex + vertexPerProcess;
28 
29  // Slice maxVertex of last process
30  if(minVertex > vertexCount){
31  return std::vector<Vertex>();
32  }
33 
34  maxVertex = std::min(maxVertex, vertexCount);
35 
36  assert(minVertex <= maxVertex);
37 
38  std::vector<Vertex> vertices = graph.getVertices();
39  std::vector<Vertex> myVertices(vertices.begin() + minVertex, vertices.begin() + maxVertex);
40  return myVertices;
41 
42  }
43 
44  };
45 
46  } /* mapping */
47 
48 } /* graybat */
Definition: Consecutive.hpp:11
Definition: BiStar.hpp:8