X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/544e6fac3fc91ae81d5daa4481562240c2cb2467..ca2e418072d73461d9c4f1e39e77c9f7380eb3fd:/src/smpi/private.h diff --git a/src/smpi/private.h b/src/smpi/private.h index 3f9c284bba..d600eb7ad3 100644 --- a/src/smpi/private.h +++ b/src/smpi/private.h @@ -7,15 +7,17 @@ #ifndef SMPI_PRIVATE_H #define SMPI_PRIVATE_H +#include "simgrid/simix.h" +#include "smpi/smpi.h" +#include "src/smpi/smpi_group.hpp" +#include "src/smpi/smpi_comm.hpp" +#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() @@ -44,8 +46,8 @@ enum smpi_process_state{ // for each such structure these function should be implemented (vector // index hvector hindex struct) 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 (*serialize)(void * input, void *output, int count, void* subtype); + void (*unserialize)(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; @@ -77,6 +79,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) @@ -156,6 +159,8 @@ XBT_PRIVATE int smpi_mpi_cart_rank(MPI_Comm comm, int* coords, int* rank); XBT_PRIVATE int smpi_mpi_cart_shift(MPI_Comm comm, int direction, int disp, int *rank_source, int *rank_dest); 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 void smpi_graph_topo_destroy(MPIR_Graph_Topology cart); +XBT_PRIVATE void smpi_dist_graph_topo_destroy(MPIR_Dist_Graph_Topology cart); XBT_PRIVATE smpi_process_data_t smpi_process_data(); XBT_PRIVATE smpi_process_data_t smpi_process_remote_data(int index); @@ -180,9 +185,10 @@ 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** comm, xbt_bar_t*bar); +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_activity_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); @@ -238,56 +244,30 @@ XBT_PRIVATE void smpi_empty_status(MPI_Status * status); 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, 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); -XBT_PRIVATE void smpi_group_destroy(MPI_Group group); -XBT_PRIVATE void smpi_group_set_mapping(MPI_Group group, int index, int rank); -XBT_PRIVATE int smpi_group_index(MPI_Group group, int rank); -XBT_PRIVATE int smpi_group_rank(MPI_Group group, int index); -XBT_PRIVATE int smpi_group_use(MPI_Group group); -XBT_PRIVATE int smpi_group_unuse(MPI_Group group); -XBT_PRIVATE int smpi_group_size(MPI_Group group); -XBT_PRIVATE int smpi_group_compare(MPI_Group group1, MPI_Group group2); -XBT_PRIVATE int smpi_group_incl(MPI_Group group, int n, int* ranks, MPI_Group* newgroup); - -XBT_PRIVATE MPI_Topology smpi_comm_topo(MPI_Comm comm); -XBT_PRIVATE MPI_Comm smpi_comm_new(MPI_Group group, MPI_Topology topo); -XBT_PRIVATE void smpi_comm_destroy(MPI_Comm comm); -XBT_PRIVATE MPI_Group smpi_comm_group(MPI_Comm comm); -XBT_PRIVATE int smpi_comm_size(MPI_Comm comm); -XBT_PRIVATE void smpi_comm_get_name(MPI_Comm comm, char* name, int* len); -XBT_PRIVATE int smpi_comm_rank(MPI_Comm comm); -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); -XBT_PRIVATE int* smpi_comm_get_leaders_map(MPI_Comm comm); -XBT_PRIVATE MPI_Comm smpi_comm_get_leaders_comm(MPI_Comm comm); -XBT_PRIVATE MPI_Comm smpi_comm_get_intra_comm(MPI_Comm comm); -XBT_PRIVATE int smpi_comm_is_uniform(MPI_Comm comm); -XBT_PRIVATE int smpi_comm_is_blocked(MPI_Comm comm); -XBT_PRIVATE void smpi_comm_init_smp(MPI_Comm comm); +XBT_PRIVATE void smpi_op_set_fortran(MPI_Op op); +XBT_PRIVATE void smpi_op_apply(MPI_Op op, void *invec, void *inoutvec, int *len, MPI_Datatype * datatype); + XBT_PRIVATE int smpi_comm_c2f(MPI_Comm comm); +XBT_PRIVATE int smpi_comm_add_f(MPI_Comm comm); XBT_PRIVATE MPI_Comm smpi_comm_f2c(int comm); XBT_PRIVATE int smpi_group_c2f(MPI_Group group); +XBT_PRIVATE int smpi_group_add_f(MPI_Group group); XBT_PRIVATE MPI_Group smpi_group_f2c(int group); XBT_PRIVATE int smpi_request_c2f(MPI_Request req); +XBT_PRIVATE int smpi_request_add_f(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 int smpi_op_add_f(MPI_Op op); XBT_PRIVATE MPI_Op smpi_op_f2c(int op); XBT_PRIVATE int smpi_win_c2f(MPI_Win win); +XBT_PRIVATE int smpi_win_add_f(MPI_Win win); XBT_PRIVATE MPI_Win smpi_win_f2c(int win); XBT_PRIVATE int smpi_info_c2f(MPI_Info info); +XBT_PRIVATE int smpi_info_add_f(MPI_Info info); XBT_PRIVATE MPI_Info smpi_info_f2c(int info); XBT_PRIVATE MPI_Request smpi_mpi_send_init(void *buf, int count, MPI_Datatype datatype, int dst, int tag, @@ -384,13 +364,10 @@ XBT_PRIVATE int smpi_coll_tuned_alltoall_basic_linear(void *sendbuf, int sendcou void *recvbuf, int recvcount, MPI_Datatype recvtype, MPI_Comm comm); XBT_PRIVATE int smpi_coll_basic_alltoallv(void *sendbuf, int *sendcounts, int *senddisps, MPI_Datatype sendtype, void *recvbuf, int *recvcounts, int *recvdisps, MPI_Datatype recvtype, MPI_Comm comm); - XBT_PRIVATE int smpi_comm_keyval_create(MPI_Comm_copy_attr_function* copy_fn, MPI_Comm_delete_attr_function* delete_fn, int* keyval, void* extra_state); XBT_PRIVATE int smpi_comm_keyval_free(int* keyval); -XBT_PRIVATE int smpi_comm_attr_get(MPI_Comm comm, int keyval, void* attr_value, int* flag); -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); + XBT_PRIVATE int smpi_type_attr_delete(MPI_Datatype type, int keyval); XBT_PRIVATE int smpi_type_attr_get(MPI_Datatype type, int keyval, void* attr_value, int* flag); XBT_PRIVATE int smpi_type_attr_put(MPI_Datatype type, int keyval, void* attr_value); @@ -399,11 +376,14 @@ 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 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 +typedef enum { shmalloc_none, shmalloc_local, shmalloc_global } shared_malloc_type; +extern XBT_PRIVATE shared_malloc_type smpi_cfg_shared_malloc; // Whether to activate shared malloc + 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); @@ -419,9 +399,6 @@ XBT_PRIVATE void* smpi_get_tmp_sendbuffer(int size); XBT_PRIVATE void* smpi_get_tmp_recvbuffer(int size); XBT_PRIVATE void smpi_free_tmp_buffer(void* buf); -XBT_PRIVATE int smpi_comm_attr_get(MPI_Comm comm, int keyval, void* attr_value, int* flag); -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* ierr); @@ -677,6 +654,12 @@ 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 */ @@ -696,8 +679,8 @@ 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); @@ -715,10 +698,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; }