1 /* Copyright (c) 2004-2018. The SimGrid Team. All rights reserved. */
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. */
9 #include "simgrid/forward.h"
10 #include "xbt/graph.h"
12 /** \brief Resource model description
14 struct surf_model_description {
16 const char* description;
17 void_f_void_t model_init_preparse;
19 typedef struct surf_model_description s_surf_model_description_t;
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);
24 /***************************/
25 /* Generic model object */
26 /***************************/
28 /** @{ @ingroup SURF_c_bindings */
31 * @brief Pop an action from the done actions set
33 * @param model The model from which the action is extracted
34 * @return An action in done state
36 XBT_PUBLIC simgrid::kernel::resource::Action*
37 surf_model_extract_done_action_set(simgrid::kernel::resource::Model* model);
40 * @brief Pop an action from the failed actions set
42 * @param model The model from which the action is extracted
43 * @return An action in failed state
45 XBT_PUBLIC simgrid::kernel::resource::Action*
46 surf_model_extract_failed_action_set(simgrid::kernel::resource::Model* model);
49 * @brief Get the size of the running action set of a model
51 * @param model The model
52 * @return The size of the running action set
54 XBT_PUBLIC int surf_model_running_action_set_size(simgrid::kernel::resource::Model* model);
57 * @brief [brief description]
58 * @details [long description]
60 * @param action The surf cpu action
61 * @param bound [description]
63 XBT_PUBLIC void surf_cpu_action_set_bound(simgrid::kernel::resource::Action* action, double bound);
67 /**************************************/
68 /* Implementations of model object */
69 /**************************************/
71 /** \ingroup SURF_models
72 * \brief The CPU model object for the physical machine layer
74 XBT_PUBLIC_DATA simgrid::surf::CpuModel* surf_cpu_model_pm;
76 /** \ingroup SURF_models
77 * \brief The CPU model object for the virtual machine layer
79 XBT_PUBLIC_DATA simgrid::surf::CpuModel* surf_cpu_model_vm;
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:...
85 XBT_PUBLIC_DATA s_surf_model_description_t surf_optimization_mode_description[];
87 /** \ingroup SURF_plugins
88 * \brief The list of all available surf plugins
90 XBT_PUBLIC_DATA s_surf_model_description_t surf_plugin_description[];
92 /** \ingroup SURF_models
93 * \brief The list of all available cpu model models
95 XBT_PUBLIC_DATA s_surf_model_description_t surf_cpu_model_description[];
97 /** \ingroup SURF_models
98 * \brief The list of all available network model models
100 XBT_PUBLIC_DATA s_surf_model_description_t surf_network_model_description[];
102 /** \ingroup SURF_models
103 * \brief The list of all available storage modes.
104 * This storage mode can be set using --cfg=storage/model:...
106 XBT_PUBLIC_DATA s_surf_model_description_t surf_storage_model_description[];
108 XBT_PUBLIC_DATA simgrid::surf::StorageModel* surf_storage_model;
110 /** \ingroup SURF_models
111 * \brief The host model
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.
116 XBT_PUBLIC_DATA simgrid::surf::HostModel* surf_host_model;
118 /** \ingroup SURF_models
119 * \brief The list of all available host model models
121 XBT_PUBLIC_DATA s_surf_model_description_t surf_host_model_description[];
123 /*** SURF Globals **************************/
125 /** \ingroup SURF_simulation
126 * \brief Initialize SURF
127 * \param argc argument number
128 * \param argv arguments
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()
133 * \see surf_host_model_init_CM02(), surf_host_model_init_compound(), surf_exit()
135 XBT_PUBLIC void surf_init(int* argc, char** argv); /* initialize common structures */
137 /** \ingroup SURF_simulation
138 * \brief Finish simulation initialization
140 * This function must be called before the first call to surf_solve()
142 XBT_PUBLIC void surf_presolve();
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
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.
154 XBT_PUBLIC double surf_solve(double max_date);
156 /** \ingroup SURF_simulation
157 * \brief Return the current time
159 * Return the current time in millisecond.
161 XBT_PUBLIC double surf_get_clock();
163 /** \ingroup SURF_simulation
170 XBT_PUBLIC void surf_exit();
172 /* surf parse file related (public because called from a test suite) */
173 XBT_PUBLIC void parse_platform_file(const char* file);
175 /********** Tracing **********/
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);