+ /* Cpu model */
+
+ /** \brief CPU model extension public
+ * \ingroup SURF_models
+ *
+ * Public functions specific to the CPU model.
+ */
+typedef struct surf_cpu_model_extension_public {
+ surf_action_t(*execute) (void *cpu, double size);
+ surf_action_t(*sleep) (void *cpu, double duration);
+ e_surf_resource_state_t(*get_state) (void *cpu);
+ double (*get_speed) (void *cpu, double load);
+ double (*get_available_speed) (void *cpu);
+ void (*create_resource) (char *name, double power_peak,
+ double power_scale,
+ tmgr_trace_t power_trace,
+ int core,
+ e_surf_resource_state_t state_initial,
+ tmgr_trace_t state_trace,
+ xbt_dict_t cpu_properties);
+ void (*add_traces) (void);
+} s_surf_model_extension_cpu_t;
+
+ /* Network model */
+
+ /** \brief Network model extension public
+ * \ingroup SURF_models
+ *
+ * Public functions specific to the network model
+ */
+typedef struct surf_network_model_extension_public {
+ surf_action_t(*communicate) (const char *src_name,
+ const char *dst_name,
+ double size, double rate);
+ xbt_dynar_t(*get_route) (const char *src_name, const char *dst_name);
+ double (*get_link_bandwidth) (const void *link);
+ double (*get_link_latency) (const void *link);
+ int (*link_shared) (const void *link);
+ void (*add_traces) (void);
+ void (*create_resource) (char *name,
+ double bw_initial,
+ tmgr_trace_t bw_trace,
+ double lat_initial,
+ tmgr_trace_t lat_trace,
+ e_surf_resource_state_t
+ state_initial,
+ tmgr_trace_t state_trace,
+ e_surf_link_sharing_policy_t policy,
+ xbt_dict_t properties);
+} s_surf_model_extension_network_t;
+
+ /** \brief Workstation model extension public
+ * \ingroup SURF_models
+ *
+ * Public functions specific to the workstation model.
+ */
+typedef struct surf_workstation_model_extension_public {
+ surf_action_t(*execute) (void *workstation, double size); /**< Execute a computation amount on a workstation
+ and create the corresponding action */
+ surf_action_t(*sleep) (void *workstation, double duration); /**< Make a workstation sleep during a given duration */
+ e_surf_resource_state_t(*get_state) (void *workstation); /**< Return the CPU state of a workstation */
+ double (*get_speed) (void *workstation, double load); /**< Return the speed of a workstation */
+ double (*get_available_speed) (void *workstation); /**< Return tha available speed of a workstation */
+ surf_action_t(*communicate) (void *workstation_src, /**< Execute a communication amount between two workstations */
+ void *workstation_dst, double size,
+ double max_rate);
+ xbt_dynar_t(*get_route) (void *workstation_src, void *workstation_dst); /**< Get the list of links between two ws */
+
+ surf_action_t(*execute_parallel_task) (int workstation_nb, /**< Execute a parallel task on several workstations */
+ void **workstation_list,
+ double *computation_amount,
+ double *communication_amount,
+ double amount, double rate);
+ double (*get_link_bandwidth) (const void *link); /**< Return the current bandwidth of a network link */
+ double (*get_link_latency) (const void *link); /**< Return the current latency of a network link */
+ int (*link_shared) (const void *link);
+ xbt_dict_t(*get_properties) (const void *resource);
+ void (*link_create_resource) (char *name,
+ double bw_initial,
+ tmgr_trace_t bw_trace,
+ double lat_initial,
+ tmgr_trace_t lat_trace,
+ e_surf_resource_state_t
+ state_initial,
+ tmgr_trace_t state_trace,
+ e_surf_link_sharing_policy_t
+ policy, xbt_dict_t properties);
+ void (*cpu_create_resource) (char *name, double power_peak,
+ double power_scale,
+ tmgr_trace_t power_trace,
+ e_surf_resource_state_t state_initial,
+ tmgr_trace_t state_trace,
+ xbt_dict_t cpu_properties);
+ void (*add_traces) (void);
+
+} s_surf_model_extension_workstation_t;
+
+
+
+
+/** \brief Model datatype