Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
2c06a7524dc64985e32ad5044417348040e8afe9
[simgrid.git] / include / simgrid / jedule / jedule_platform.hpp
1 /* Copyright (c) 2010-2012, 2014-2015. The SimGrid Team.
2  * All rights reserved.                                                     */
3
4 /* This program is free software; you can redistribute it and/or modify it
5  * under the terms of the license (GNU LGPL) which comes with this package. */
6
7 #ifndef JED_SIMGRID_PLATFORM_H_
8 #define JED_SIMGRID_PLATFORM_H_
9
10 #include "simgrid_config.h"
11 #include "simgrid/forward.h"
12 #include "xbt/dynar.h"
13 #include "xbt/dict.h"
14 #include <unordered_map>
15 #include <vector>
16 #include <string>
17
18 #if HAVE_JEDULE
19
20 namespace simgrid {
21 namespace jedule{
22 XBT_PUBLIC_CLASS Container {
23 public:
24   Container(std::string name);
25   virtual ~Container()=default;
26 private:
27   int last_id;
28   int is_lowest = 0;
29 public:
30   std::string name;
31   std::unordered_map<const char*, int> name2id;
32   Container *parent = nullptr;
33   std::vector<Container*> children;
34   std::vector<sg_host_t> resource_list;
35   void addChild(Container* child);
36   void addResources(std::vector<sg_host_t> hosts);
37   void createHierarchy(AS_t from_as);
38   std::vector<int> getHierarchy();
39   std::string getHierarchyAsString();
40   void print(FILE *file);
41   void printResources(FILE *file);
42 };
43
44 }
45 }
46 SG_BEGIN_DECL()
47 typedef simgrid::jedule::Container * jed_container_t;
48
49 /* FIXME: jedule_container should be objectified too */
50 /** selection of a subset of resources from the original set */
51 struct jed_res_subset {
52   jed_container_t parent;
53   int start_idx; // start idx in resource_list of container
54   int nres;      // number of resources spanning starting at start_idx
55 };
56
57 typedef struct jed_res_subset s_jed_res_subset_t, *jed_res_subset_t;
58
59 /* FIXME: jedule should be objectified too */
60
61 typedef struct jedule_struct {
62   jed_container_t root_container;
63   std::unordered_map<char*, char*> jedule_meta_info;
64 } s_jedule_t;
65
66 typedef s_jedule_t *jedule_t;
67
68 void jed_create_jedule(jedule_t *jedule);
69 void jed_free_jedule(jedule_t jedule);
70 void jedule_add_meta_info(jedule_t jedule, char *key, char *value);
71
72 /**
73  * it is assumed that the host_names in the entire system are unique that means that we don't need parent references
74  *
75  * subset_list must be allocated
76  * host_names is the list of host_names associated with an event
77  */
78 void jed_simgrid_get_resource_selection_by_hosts(xbt_dynar_t subset_list, std::vector<sg_host_t>* host_list);
79
80 /*
81   global:
82       hash host_id -> container
83   container:
84       hash host_id -> jed_host_id
85       list <- [ jed_host_ids ]
86       list <- sort( list )
87       list_chunks <- chunk( list )   -> [ 1, 3-5, 7-9 ]
88 */
89
90 SG_END_DECL()
91
92 #endif
93
94 #endif /* JED_SIMGRID_PLATFORM_H_ */