X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/0ec122a780b6dd27347cca4d240de563e607f349..e626a3f6f5951b95faba4c60c03228f42aa671ad:/src/smpi/private.h diff --git a/src/smpi/private.h b/src/smpi/private.h index f6245b54a3..80aac26cc2 100644 --- a/src/smpi/private.h +++ b/src/smpi/private.h @@ -7,15 +7,15 @@ #ifndef SMPI_PRIVATE_H #define SMPI_PRIVATE_H +#include "simgrid/simix.h" +#include "smpi/smpi.h" +#include "src/include/smpi/smpi_interface.h" +#include "src/instr/instr_private.h" #include "src/internal_config.h" #include "xbt.h" #include "xbt/base.h" +#include "xbt/synchro.h" #include "xbt/xbt_os_time.h" -#include "xbt/synchro_core.h" -#include "simgrid/simix.h" -#include "src/include/smpi/smpi_interface.h" -#include "smpi/smpi.h" -#include "src/instr/instr_private.h" SG_BEGIN_DECL() @@ -47,13 +47,14 @@ typedef struct s_smpi_subtype{ void (*serialize)(const void * input, void *output, int count, void* subtype); void (*unserialize)(const void * input, void *output, int count, void* subtype, MPI_Op op); void (*subtype_free)(MPI_Datatype* type); + void (*subtype_use)(MPI_Datatype* type); } s_smpi_subtype_t; typedef struct s_smpi_mpi_datatype{ char* name; size_t size; /* this let us know if a serialization is required*/ - size_t has_subtype; + size_t sizeof_substruct; MPI_Aint lb; MPI_Aint ub; int flags; @@ -76,6 +77,7 @@ typedef struct s_smpi_mpi_datatype{ #define COLL_TAG_GATHERV -2223 #define COLL_TAG_BCAST -3334 #define COLL_TAG_ALLREDUCE -4445 +#define SMPI_RMA_TAG -1234 #define MPI_COMM_UNINITIALIZED ((MPI_Comm)-1) @@ -98,7 +100,7 @@ typedef struct s_smpi_mpi_request { int truncated; size_t real_size; MPI_Comm comm; - smx_synchro_t action; + smx_activity_t action; unsigned flags; int detached; MPI_Request detached_sender; @@ -125,11 +127,11 @@ typedef struct s_smpi_mpi_info { int refcount; } s_smpi_mpi_info_t; -XBT_PRIVATE void smpi_process_destroy(void); -XBT_PRIVATE void smpi_process_finalize(void); -XBT_PRIVATE int smpi_process_finalized(void); -XBT_PRIVATE int smpi_process_initialized(void); -XBT_PRIVATE void smpi_process_mark_as_initialized(void); +XBT_PRIVATE void smpi_process_destroy(); +XBT_PRIVATE void smpi_process_finalize(); +XBT_PRIVATE int smpi_process_finalized(); +XBT_PRIVATE int smpi_process_initialized(); +XBT_PRIVATE void smpi_process_mark_as_initialized(); struct s_smpi_mpi_cart_topology; typedef struct s_smpi_mpi_cart_topology *MPIR_Cart_Topology; @@ -156,44 +158,46 @@ XBT_PRIVATE int smpi_mpi_cart_shift(MPI_Comm comm, int direction, int disp, int XBT_PRIVATE int smpi_mpi_cartdim_get(MPI_Comm comm, int *ndims); XBT_PRIVATE int smpi_mpi_dims_create(int nnodes, int ndims, int dims[]); -XBT_PRIVATE smpi_process_data_t smpi_process_data(void); +XBT_PRIVATE smpi_process_data_t smpi_process_data(); XBT_PRIVATE smpi_process_data_t smpi_process_remote_data(int index); // smpi_process_[set/get]_user_data must be public /* XBT_PRIVATE void smpi_process_set_user_data(void *); */ /* XBT_PRIVATE void* smpi_process_get_user_data(void); */ -XBT_PRIVATE int smpi_process_count(void); -XBT_PRIVATE MPI_Comm smpi_process_comm_world(void); -XBT_PRIVATE MPI_Comm smpi_process_get_comm_intra(void); +XBT_PRIVATE int smpi_process_count(); +XBT_PRIVATE MPI_Comm smpi_process_comm_world(); +XBT_PRIVATE MPI_Comm smpi_process_get_comm_intra(); XBT_PRIVATE void smpi_process_set_comm_intra(MPI_Comm comm); -XBT_PRIVATE smx_mailbox_t smpi_process_mailbox(void); +XBT_PRIVATE smx_mailbox_t smpi_process_mailbox(); XBT_PRIVATE smx_mailbox_t smpi_process_remote_mailbox(int index); -XBT_PRIVATE smx_mailbox_t smpi_process_mailbox_small(void); +XBT_PRIVATE smx_mailbox_t smpi_process_mailbox_small(); XBT_PRIVATE smx_mailbox_t smpi_process_remote_mailbox_small(int index); -XBT_PRIVATE xbt_mutex_t smpi_process_mailboxes_mutex(void); +XBT_PRIVATE xbt_mutex_t smpi_process_mailboxes_mutex(); XBT_PRIVATE xbt_mutex_t smpi_process_remote_mailboxes_mutex(int index); -XBT_PRIVATE xbt_os_timer_t smpi_process_timer(void); -XBT_PRIVATE void smpi_process_simulated_start(void); -XBT_PRIVATE double smpi_process_simulated_elapsed(void); +XBT_PRIVATE xbt_os_timer_t smpi_process_timer(); +XBT_PRIVATE void smpi_process_simulated_start(); +XBT_PRIVATE double smpi_process_simulated_elapsed(); XBT_PRIVATE void smpi_process_set_sampling(int s); -XBT_PRIVATE int smpi_process_get_sampling(void); -XBT_PRIVATE void smpi_process_set_replaying(int s); -XBT_PRIVATE int smpi_process_get_replaying(void); +XBT_PRIVATE int smpi_process_get_sampling(); +XBT_PRIVATE void smpi_process_set_replaying(bool s); +XBT_PRIVATE bool smpi_process_get_replaying(); -XBT_PRIVATE void smpi_deployment_register_process(const char* instance_id, int rank, int index, MPI_Comm**, xbt_bar_t*); -XBT_PRIVATE void smpi_deployment_cleanup_instances(void); +XBT_PRIVATE void smpi_deployment_register_process(const char* instance_id, int rank, int index, MPI_Comm** comm, + msg_bar_t* bar); +XBT_PRIVATE void smpi_deployment_cleanup_instances(); -XBT_PRIVATE void smpi_comm_copy_buffer_callback(smx_synchro_t comm, void *buff, size_t buff_size); +XBT_PRIVATE void smpi_comm_copy_buffer_callback(smx_activity_t comm, void *buff, size_t buff_size); -XBT_PRIVATE void smpi_comm_null_copy_buffer_callback(smx_synchro_t comm, void *buff, size_t buff_size); +XBT_PRIVATE void smpi_comm_null_copy_buffer_callback(smx_activity_t comm, void *buff, size_t buff_size); XBT_PRIVATE void print_request(const char *message, MPI_Request request); -XBT_PRIVATE int smpi_enabled(void); -XBT_PRIVATE void smpi_global_init(void); -XBT_PRIVATE void smpi_global_destroy(void); -XBT_PRIVATE double smpi_mpi_wtime(void); +XBT_PRIVATE int smpi_enabled(); +XBT_PRIVATE void smpi_global_init(); +XBT_PRIVATE void smpi_global_destroy(); +XBT_PRIVATE double smpi_mpi_wtime(); +XBT_PRIVATE void smpi_mpi_init(); -XBT_PRIVATE int is_datatype_valid(MPI_Datatype datatype); +XBT_PRIVATE bool is_datatype_valid(MPI_Datatype datatype); XBT_PRIVATE size_t smpi_datatype_size(MPI_Datatype datatype); XBT_PRIVATE MPI_Aint smpi_datatype_lb(MPI_Datatype datatype); @@ -221,7 +225,7 @@ XBT_PRIVATE int smpi_datatype_hindexed(int count, int* blocklens, MPI_Aint* indi XBT_PRIVATE int smpi_datatype_struct(int count, int* blocklens, MPI_Aint* indices, MPI_Datatype* old_types, MPI_Datatype* new_type); -XBT_PRIVATE void smpi_datatype_create(MPI_Datatype* new_type, int size,int lb, int ub, int has_subtype, +XBT_PRIVATE void smpi_datatype_create(MPI_Datatype* new_type, int size,int lb, int ub, int sizeof_substruct, void *struct_type, int flags); XBT_PRIVATE void smpi_datatype_free(MPI_Datatype* type); @@ -233,10 +237,11 @@ XBT_PRIVATE int smpi_mpi_pack(void* inbuf, int incount, MPI_Datatype type, void* MPI_Comm comm); XBT_PRIVATE void smpi_empty_status(MPI_Status * status); -XBT_PRIVATE MPI_Op smpi_op_new(MPI_User_function * function, int commute); -XBT_PRIVATE int smpi_op_is_commute(MPI_Op op); +XBT_PRIVATE MPI_Op smpi_op_new(MPI_User_function * function, bool commute); +XBT_PRIVATE bool smpi_op_is_commute(MPI_Op op); XBT_PRIVATE void smpi_op_destroy(MPI_Op op); -XBT_PRIVATE void smpi_op_apply(MPI_Op op, void *invec, void *inoutvec, int *len, MPI_Datatype * datatype); +XBT_PRIVATE void smpi_op_set_fortran(MPI_Op op); +XBT_PRIVATE void smpi_op_apply(MPI_Op op, const void *invec, void *inoutvec, int *len, MPI_Datatype * datatype); XBT_PRIVATE MPI_Group smpi_group_new(int size); XBT_PRIVATE MPI_Group smpi_group_copy(MPI_Group origin); @@ -261,6 +266,8 @@ XBT_PRIVATE MPI_Comm smpi_comm_split(MPI_Comm comm, int color, int key); XBT_PRIVATE int smpi_comm_dup(MPI_Comm comm, MPI_Comm* newcomm); XBT_PRIVATE void smpi_comm_use(MPI_Comm comm); XBT_PRIVATE void smpi_comm_unuse(MPI_Comm comm); +XBT_PRIVATE void smpi_comm_cleanup_attributes(MPI_Comm comm); +XBT_PRIVATE void smpi_comm_cleanup_smp(MPI_Comm comm); XBT_PRIVATE void smpi_comm_set_leaders_comm(MPI_Comm comm, MPI_Comm leaders); XBT_PRIVATE void smpi_comm_set_intra_comm(MPI_Comm comm, MPI_Comm leaders); XBT_PRIVATE int* smpi_comm_get_non_uniform_map(MPI_Comm comm); @@ -278,6 +285,7 @@ XBT_PRIVATE MPI_Group smpi_group_f2c(int group); XBT_PRIVATE int smpi_request_c2f(MPI_Request req); XBT_PRIVATE MPI_Request smpi_request_f2c(int req); XBT_PRIVATE int smpi_type_c2f(MPI_Datatype datatype); +XBT_PRIVATE int smpi_type_add_f(MPI_Datatype datatype); XBT_PRIVATE MPI_Datatype smpi_type_f2c(int datatype); XBT_PRIVATE int smpi_op_c2f(MPI_Op op); XBT_PRIVATE MPI_Op smpi_op_f2c(int op); @@ -395,8 +403,8 @@ XBT_PRIVATE int smpi_type_keyval_create(MPI_Type_copy_attr_function* copy_fn, MP XBT_PRIVATE int smpi_type_keyval_free(int* keyval); // utilities extern XBT_PRIVATE double smpi_cpu_threshold; -extern XBT_PRIVATE double smpi_running_power; -extern XBT_PRIVATE int smpi_privatize_global_variables; +extern XBT_PRIVATE double smpi_host_speed; +extern XBT_PRIVATE bool smpi_privatize_global_variables; extern XBT_PRIVATE char* smpi_start_data_exe; //start of the data+bss segment of the executable extern XBT_PRIVATE int smpi_size_data_exe; //size of the data+bss segment of the executable @@ -404,12 +412,12 @@ XBT_PRIVATE void smpi_switch_data_segment(int dest); XBT_PRIVATE void smpi_really_switch_data_segment(int dest); XBT_PRIVATE int smpi_is_privatisation_file(char* file); -XBT_PRIVATE void smpi_get_executable_global_size(void); -XBT_PRIVATE void smpi_initialize_global_memory_segments(void); -XBT_PRIVATE void smpi_destroy_global_memory_segments(void); -XBT_PRIVATE void smpi_bench_destroy(void); -XBT_PRIVATE void smpi_bench_begin(void); -XBT_PRIVATE void smpi_bench_end(void); +XBT_PRIVATE void smpi_get_executable_global_size(); +XBT_PRIVATE void smpi_initialize_global_memory_segments(); +XBT_PRIVATE void smpi_destroy_global_memory_segments(); +XBT_PRIVATE void smpi_bench_destroy(); +XBT_PRIVATE void smpi_bench_begin(); +XBT_PRIVATE void smpi_bench_end(); XBT_PRIVATE void* smpi_get_tmp_sendbuffer(int size); XBT_PRIVATE void* smpi_get_tmp_recvbuffer(int size); @@ -420,13 +428,13 @@ XBT_PRIVATE XBT_PRIVATE int smpi_comm_attr_delete(MPI_Comm comm, int keyval); XBT_PRIVATE int smpi_comm_attr_put(MPI_Comm comm, int keyval, void* attr_value); // f77 wrappers -void mpi_init_(int*); -void mpi_finalize_(int*); +void mpi_init_(int* ierr); +void mpi_finalize_(int* ierr); void mpi_abort_(int* comm, int* errorcode, int* ierr); void mpi_comm_rank_(int* comm, int* rank, int* ierr); void mpi_comm_size_(int* comm, int* size, int* ierr); -double mpi_wtime_(void); -double mpi_wtick_(void); +double mpi_wtime_(); +double mpi_wtick_(); void mpi_initialized_(int* flag, int* ierr); void mpi_comm_dup_(int* comm, int* newcomm, int* ierr); @@ -673,11 +681,17 @@ void mpi_comm_spawn_ ( char *command, char *argv, int* maxprocs, int* info, int* void mpi_comm_spawn_multiple_ ( int* count, char *array_of_commands, char** array_of_argv, int* array_of_maxprocs, int* array_of_info, int* root, int* comm, int*intercomm, int* array_of_errcodes, int* ierr); void mpi_comm_get_parent_ ( int*parent, int* ierr); +void mpi_file_close_ ( int* file, int* ierr); +void mpi_file_delete_ ( char* filename, int* info, int* ierr); +void mpi_file_open_ ( int* comm, char* filename, int* amode, int* info, int* fh, int* ierr); +void mpi_file_set_view_ ( int* fh, long long int* offset, int* etype, int* filetype, char* datarep, int* info, int* ierr); +void mpi_file_read_ ( int* fh, void* buf, int* count, int* datatype, MPI_Status* status, int* ierr); +void mpi_file_write_ ( int* fh, void* buf, int* count, int* datatype, MPI_Status* status, int* ierr); /********** Tracing **********/ /* from instr_smpi.c */ XBT_PRIVATE void TRACE_internal_smpi_set_category (const char *category); -XBT_PRIVATE const char *TRACE_internal_smpi_get_category (void); +XBT_PRIVATE const char *TRACE_internal_smpi_get_category (); XBT_PRIVATE void TRACE_smpi_collective_in(int rank, int root, const char *operation, instr_extra_data extra); XBT_PRIVATE void TRACE_smpi_collective_out(int rank, int root, const char *operation); XBT_PRIVATE void TRACE_smpi_computing_init(int rank); @@ -688,14 +702,15 @@ XBT_PRIVATE void TRACE_smpi_sleeping_out(int rank); XBT_PRIVATE void TRACE_smpi_sleeping_in(int rank, instr_extra_data extra); XBT_PRIVATE void TRACE_smpi_testing_out(int rank); XBT_PRIVATE void TRACE_smpi_testing_in(int rank, instr_extra_data extra); -XBT_PRIVATE void TRACE_smpi_alloc(void); -XBT_PRIVATE void TRACE_smpi_release(void); +XBT_PRIVATE void TRACE_smpi_alloc(); +XBT_PRIVATE void TRACE_smpi_release(); XBT_PRIVATE void TRACE_smpi_ptp_in(int rank, int src, int dst, const char *operation, instr_extra_data extra); XBT_PRIVATE void TRACE_smpi_ptp_out(int rank, int src, int dst, const char *operation); -XBT_PRIVATE void TRACE_smpi_send(int rank, int src, int dst, int size); -XBT_PRIVATE void TRACE_smpi_recv(int rank, int src, int dst); +XBT_PRIVATE void TRACE_smpi_send(int rank, int src, int dst, int tag, int size); +XBT_PRIVATE void TRACE_smpi_recv(int rank, int src, int dst, int tag); XBT_PRIVATE void TRACE_smpi_init(int rank); XBT_PRIVATE void TRACE_smpi_finalize(int rank); +XBT_PRIVATE char *smpi_container(int rank, char *container, int n); XBT_PRIVATE const char* encode_datatype(MPI_Datatype datatype, int* known); @@ -710,10 +725,10 @@ extern XBT_PRIVATE smpi_privatisation_region_t smpi_privatisation_regions; extern XBT_PRIVATE int smpi_loaded_page; extern XBT_PRIVATE int smpi_universe_size; -XBT_PRIVATE int SIMIX_process_get_PID(smx_process_t self); +XBT_PRIVATE int SIMIX_process_get_PID(smx_actor_t self); static inline __attribute__ ((always_inline)) -int smpi_process_index_of_smx_process(smx_process_t process) { +int smpi_process_index_of_smx_process(smx_actor_t process) { return SIMIX_process_get_PID(process) -1; }