Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
0330f60ea95bc74d1e5e83fe7349c736b430723f
[simgrid.git] / src / include / surf / surf.hpp
1 /* Copyright (c) 2004-2018. The SimGrid Team. All rights reserved.          */
2
3 /* This program is free software; you can redistribute it and/or modify it
4  * under the terms of the license (GNU LGPL) which comes with this package. */
5
6 #ifndef SURF_SURF_H
7 #define SURF_SURF_H
8
9 #include "simgrid/forward.h"
10 #include "xbt/graph.h"
11
12 /** \brief Resource model description
13  */
14 struct surf_model_description {
15   const char* name;
16   const char* description;
17   void_f_void_t model_init_preparse;
18 };
19 typedef struct surf_model_description s_surf_model_description_t;
20
21 XBT_PUBLIC int find_model_description(s_surf_model_description_t* table, std::string name);
22 XBT_PUBLIC void model_help(const char* category, s_surf_model_description_t* table);
23
24 /***************************/
25 /* Generic model object */
26 /***************************/
27
28 /** @{ @ingroup SURF_c_bindings */
29
30 /**
31  * @brief Pop an action from the done actions set
32  *
33  * @param model The model from which the action is extracted
34  * @return An action in done state
35  */
36 XBT_PUBLIC simgrid::kernel::resource::Action*
37 surf_model_extract_done_action_set(simgrid::kernel::resource::Model* model);
38
39 /**
40  * @brief Pop an action from the failed actions set
41  *
42  * @param model The model from which the action is extracted
43  * @return An action in failed state
44  */
45 XBT_PUBLIC simgrid::kernel::resource::Action*
46 surf_model_extract_failed_action_set(simgrid::kernel::resource::Model* model);
47
48 /**
49  * @brief Get the size of the running action set of a model
50  *
51  * @param model The model
52  * @return The size of the running action set
53  */
54 XBT_PUBLIC int surf_model_running_action_set_size(simgrid::kernel::resource::Model* model);
55
56 /**
57  * @brief [brief description]
58  * @details [long description]
59  *
60  * @param action The surf cpu action
61  * @param bound [description]
62  */
63 XBT_PUBLIC void surf_cpu_action_set_bound(simgrid::kernel::resource::Action* action, double bound);
64
65 /** @} */
66
67 /**************************************/
68 /* Implementations of model object */
69 /**************************************/
70
71 /** \ingroup SURF_models
72  *  \brief The CPU model object for the physical machine layer
73  */
74 XBT_PUBLIC_DATA simgrid::surf::CpuModel* surf_cpu_model_pm;
75
76 /** \ingroup SURF_models
77  *  \brief The CPU model object for the virtual machine layer
78  */
79 XBT_PUBLIC_DATA simgrid::surf::CpuModel* surf_cpu_model_vm;
80
81 /** \ingroup SURF_models
82  *  \brief The list of all available optimization modes (both for cpu and networks).
83  *  These optimization modes can be set using --cfg=cpu/optim:... and --cfg=network/optim:...
84  */
85 XBT_PUBLIC_DATA s_surf_model_description_t surf_optimization_mode_description[];
86
87 /** \ingroup SURF_plugins
88  *  \brief The list of all available surf plugins
89  */
90 XBT_PUBLIC_DATA s_surf_model_description_t surf_plugin_description[];
91
92 /** \ingroup SURF_models
93  *  \brief The list of all available cpu model models
94  */
95 XBT_PUBLIC_DATA s_surf_model_description_t surf_cpu_model_description[];
96
97 /** \ingroup SURF_models
98  *  \brief The list of all available network model models
99  */
100 XBT_PUBLIC_DATA s_surf_model_description_t surf_network_model_description[];
101
102 /** \ingroup SURF_models
103  *  \brief The list of all available storage modes.
104  *  This storage mode can be set using --cfg=storage/model:...
105  */
106 XBT_PUBLIC_DATA s_surf_model_description_t surf_storage_model_description[];
107
108 XBT_PUBLIC_DATA simgrid::surf::StorageModel* surf_storage_model;
109
110 /** \ingroup SURF_models
111  *  \brief The host model
112  *
113  *  Note that when you create an API on top of SURF, the host model should be the only one you use
114  *  because depending on the platform model, the network model and the CPU model may not exist.
115  */
116 XBT_PUBLIC_DATA simgrid::surf::HostModel* surf_host_model;
117
118 /** \ingroup SURF_models
119  *  \brief The list of all available host model models
120  */
121 XBT_PUBLIC_DATA s_surf_model_description_t surf_host_model_description[];
122
123 /*** SURF Globals **************************/
124
125 /** \ingroup SURF_simulation
126  *  \brief Initialize SURF
127  *  \param argc argument number
128  *  \param argv arguments
129  *
130  *  This function has to be called to initialize the common structures. Then you will have to create the environment by
131  *  calling  e.g. surf_host_model_init_CM02()
132  *
133  *  \see surf_host_model_init_CM02(), surf_host_model_init_compound(), surf_exit()
134  */
135 XBT_PUBLIC void surf_init(int* argc, char** argv); /* initialize common structures */
136
137 /** \ingroup SURF_simulation
138  *  \brief Finish simulation initialization
139  *
140  *  This function must be called before the first call to surf_solve()
141  */
142 XBT_PUBLIC void surf_presolve();
143
144 /** \ingroup SURF_simulation
145  *  \brief Performs a part of the simulation
146  *  \param max_date Maximum date to update the simulation to, or -1
147  *  \return the elapsed time, or -1.0 if no event could be executed
148  *
149  *  This function execute all possible events, update the action states  and returns the time elapsed.
150  *  When you call execute or communicate on a model, the corresponding actions are not executed immediately but only
151  *  when you call surf_solve.
152  *  Note that the returned elapsed time can be zero.
153  */
154 XBT_PUBLIC double surf_solve(double max_date);
155
156 /** \ingroup SURF_simulation
157  *  \brief Return the current time
158  *
159  *  Return the current time in millisecond.
160  */
161 XBT_PUBLIC double surf_get_clock();
162
163 /** \ingroup SURF_simulation
164  *  \brief Exit SURF
165  *
166  *  Clean everything.
167  *
168  *  \see surf_init()
169  */
170 XBT_PUBLIC void surf_exit();
171
172 /* surf parse file related (public because called from a test suite) */
173 XBT_PUBLIC void parse_platform_file(const char* file);
174
175 /********** Tracing **********/
176
177 /* instr_routing.c */
178 xbt_graph_t instr_routing_platform_graph();
179 void instr_routing_platform_graph_export_graphviz(xbt_graph_t g, const char* filename);
180
181 #endif