X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/a6a397ff4796b51612a295c39ce1f762ea9933e6..e379b4008b304af4688fe6cb29fbfdaf9e9e6873:/src/simix/private.h diff --git a/src/simix/private.h b/src/simix/private.h index 8fb2bc4443..6cf1c9a1c9 100644 --- a/src/simix/private.h +++ b/src/simix/private.h @@ -1,7 +1,5 @@ -/* $Id$ */ - -/* Copyright (c) 2007 Arnaud Legrand, Bruno Donnassolo. - All rights reserved. */ +/* Copyright (c) 2007, 2008, 2009, 2010. The SimGrid Team. + * All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it * under the terms of the license (GNU LGPL) which comes with this package. */ @@ -17,6 +15,7 @@ #include "xbt/config.h" #include "xbt/function_types.h" #include "xbt/ex_interface.h" +#include "instr/private.h" /******************************** Datatypes ***********************************/ @@ -159,15 +158,17 @@ typedef struct s_smx_comm { void *dst_buff; size_t src_buff_size; size_t *dst_buff_size; + char copied; + void *data; /* User data associated to communication */ } s_smx_comm_t; void SIMIX_network_copy_data(smx_comm_t comm); smx_comm_t SIMIX_communication_new(smx_comm_type_t type); -static inline void SIMIX_communication_use(smx_comm_t comm); -static inline void SIMIX_communication_wait_for_completion(smx_comm_t comm, double timeout); -static inline void SIMIX_rdv_push(smx_rdv_t rdv, smx_comm_t comm); -static inline void SIMIX_rdv_remove(smx_rdv_t rdv, smx_comm_t comm); +static XBT_INLINE void SIMIX_communication_use(smx_comm_t comm); +static XBT_INLINE void SIMIX_communication_wait_for_completion(smx_comm_t comm, double timeout); +static XBT_INLINE void SIMIX_rdv_push(smx_rdv_t rdv, smx_comm_t comm); +static XBT_INLINE void SIMIX_rdv_remove(smx_rdv_t rdv, smx_comm_t comm); /********************************* Action *************************************/ @@ -183,6 +184,10 @@ typedef struct s_smx_action { int refcount; /**< @brief reference counter */ surf_action_t surf_action; /* SURF modeling of computation */ smx_host_t source; +#ifdef HAVE_TRACING + long long int counter; /* simix action unique identifier for instrumentation */ + char *category; /* simix action category for instrumentation */ +#endif } s_smx_action_t; /************************** Configuration support *****************************/ @@ -203,75 +208,16 @@ void __SIMIX_action_display_conditions(smx_action_t action); /******************************** Context *************************************/ -void SIMIX_context_mod_init(void); - -void SIMIX_context_mod_exit(void); - -/* *********************** */ -/* Context type definition */ -/* *********************** */ -/* the following function pointers types describe the interface that all context - concepts must implement */ - -/* each context type derive from this structure, so they must contain this structure - * at their begining -- OOP in C :/ */ -typedef struct s_smx_context { - s_xbt_swag_hookup_t hookup; - xbt_main_func_t code; - int argc; - char **argv; - void_f_pvoid_t cleanup_func; - void *cleanup_arg; -} s_smx_ctx_base_t; -/* methods of this class */ -void smx_ctx_base_factory_init(smx_context_factory_t * factory); -int smx_ctx_base_factory_finalize(smx_context_factory_t * factory); - -smx_context_t -smx_ctx_base_factory_create_context_sized(size_t size, - xbt_main_func_t code, int argc, char** argv, - void_f_pvoid_t cleanup_func, void* cleanup_arg); -void smx_ctx_base_free(smx_context_t context); -void smx_ctx_base_stop(smx_context_t context); - - -/* *********************** */ -/* factory type definition */ -/* *********************** */ - -/* Each context implementation define its own context factory - * A context factory is responsable of the creation and manipulation of the - * execution context of all the simulated processes (and maestro) using the - * selected implementation. - * - * For example, the context switch based on java thread use the - * java implementation of the context and the java factory to build and control - * the contexts depending on this implementation. - - * The following function pointer types describe the interface that any context - * factory should implement. - */ +/* The following function pointer types describe the interface that any context + factory should implement */ -/* function used to create a new context */ -typedef smx_context_t (*smx_pfn_context_factory_create_context_t) +typedef smx_context_t (*smx_pfn_context_factory_create_context_t) (xbt_main_func_t, int, char**, void_f_pvoid_t, void*); - -/* this function finalize the specified context factory */ typedef int (*smx_pfn_context_factory_finalize_t) (smx_context_factory_t*); - -/* function used to destroy the specified context */ typedef void (*smx_pfn_context_free_t) (smx_context_t); - -/* function used to start the specified context */ typedef void (*smx_pfn_context_start_t) (smx_context_t); - -/* function used to stop the current context */ typedef void (*smx_pfn_context_stop_t) (smx_context_t); - -/* function used to suspend the current context */ typedef void (*smx_pfn_context_suspend_t) (smx_context_t context); - -/* function used to resume the current context */ typedef void (*smx_pfn_context_resume_t) (smx_context_t new_context); /* interface of the context factories */ @@ -285,6 +231,11 @@ typedef struct s_smx_context_factory { const char *name; } s_smx_context_factory_t; + +void SIMIX_context_mod_init(void); + +void SIMIX_context_mod_exit(void); + /* Selects a context factory associated with the name specified by the parameter name. * If successful the function returns 0. Otherwise the function returns the error code. */ @@ -300,7 +251,6 @@ void SIMIX_ctx_thread_factory_init(smx_context_factory_t * factory); void SIMIX_ctx_sysv_factory_init(smx_context_factory_t * factory); void SIMIX_ctx_lua_factory_init(smx_context_factory_t * factory); -void SIMIX_ctx_lua_factory_set_state(void *state); void SIMIX_ctx_java_factory_init(smx_context_factory_t * factory); @@ -334,7 +284,7 @@ void SIMIX_ctx_java_factory_init(smx_context_factory_t * factory); * \param cleanup_func the function to call when the context stops * \param cleanup_arg the argument of the cleanup_func function */ -static inline smx_context_t SIMIX_context_new(xbt_main_func_t code, int argc, +static XBT_INLINE smx_context_t SIMIX_context_new(xbt_main_func_t code, int argc, char** argv, void_f_pvoid_t cleanup_func, void* cleanup_arg) { @@ -348,7 +298,7 @@ static inline smx_context_t SIMIX_context_new(xbt_main_func_t code, int argc, * \param context the context to destroy * Argument must be stopped first -- runs in maestro context */ -static inline void SIMIX_context_free(smx_context_t context) { +static XBT_INLINE void SIMIX_context_free(smx_context_t context) { (*(simix_global->context_factory->free)) (context); } @@ -356,7 +306,7 @@ static inline void SIMIX_context_free(smx_context_t context) { * \brief stops the execution of a context * \param context to stop */ -static inline void SIMIX_context_stop(smx_context_t context) { +static XBT_INLINE void SIMIX_context_stop(smx_context_t context) { (*(simix_global->context_factory->stop)) (context); } @@ -365,7 +315,7 @@ static inline void SIMIX_context_stop(smx_context_t context) { \param old_context the actual context from which is resuming \param new_context the context to resume */ -static inline void SIMIX_context_resume(smx_context_t new_context) +static XBT_INLINE void SIMIX_context_resume(smx_context_t new_context) { (*(simix_global->context_factory->resume)) (new_context); } @@ -375,7 +325,7 @@ static inline void SIMIX_context_resume(smx_context_t new_context) scheduled it \param context the context to be suspended (it must be the running one) */ -static inline void SIMIX_context_suspend(smx_context_t context) +static XBT_INLINE void SIMIX_context_suspend(smx_context_t context) { (*(simix_global->context_factory->suspend)) (context); }