Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
[smpi] Change parallel arrays into array of structs
[simgrid.git] / src / smpi / private.h
index 9196cd1..ac6811a 100644 (file)
@@ -17,6 +17,8 @@
 #include "smpi/smpi_cocci.h"
 #include "instr/instr_private.h"
 
+SG_BEGIN_DECL()
+
 struct s_smpi_process_data;
 typedef struct s_smpi_process_data *smpi_process_data_t;
 
@@ -49,6 +51,7 @@ typedef struct s_smpi_subtype{
 } 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;
@@ -117,6 +120,7 @@ int smpi_process_finalized(void);
 int smpi_process_initialized(void);
 void smpi_process_mark_as_initialized(void);
 
+
 struct s_smpi_mpi_cart_topology;
 typedef struct s_smpi_mpi_cart_topology *MPIR_Cart_Topology;
 
@@ -152,6 +156,8 @@ void smpi_process_set_user_data(void *);
 void* smpi_process_get_user_data(void);
 int smpi_process_count(void);
 MPI_Comm smpi_process_comm_world(void);
+MPI_Comm smpi_process_get_comm_intra(void);
+void smpi_process_set_comm_intra(MPI_Comm comm);
 smx_rdv_t smpi_process_mailbox(void);
 smx_rdv_t smpi_process_remote_mailbox(int index);
 smx_rdv_t smpi_process_mailbox_small(void);
@@ -173,6 +179,7 @@ void print_request(const char *message, MPI_Request request);
 int smpi_enabled(void);
 void smpi_global_init(void);
 void smpi_global_destroy(void);
+double smpi_mpi_wtime(void);
 
 int is_datatype_valid(MPI_Datatype datatype);
 
@@ -183,6 +190,8 @@ MPI_Datatype smpi_datatype_dup(MPI_Datatype datatype);
 int smpi_datatype_extent(MPI_Datatype datatype, MPI_Aint * lb,
                          MPI_Aint * extent);
 MPI_Aint smpi_datatype_get_extent(MPI_Datatype datatype);
+void smpi_datatype_get_name(MPI_Datatype datatype, char* name, int* length);
+void smpi_datatype_set_name(MPI_Datatype datatype, char* name);
 int smpi_datatype_copy(void *sendbuf, int sendcount, MPI_Datatype sendtype,
                        void *recvbuf, int recvcount,
                        MPI_Datatype recvtype);
@@ -226,6 +235,8 @@ int smpi_group_use(MPI_Group group);
 int smpi_group_unuse(MPI_Group group);
 int smpi_group_size(MPI_Group group);
 int smpi_group_compare(MPI_Group group1, MPI_Group group2);
+int smpi_group_incl(MPI_Group group, int n, int* ranks, MPI_Group* newgroup);
+
 
 MPI_Topology smpi_comm_topo(MPI_Comm comm);
 MPI_Comm smpi_comm_new(MPI_Group group, MPI_Topology topo);
@@ -237,6 +248,15 @@ int smpi_comm_rank(MPI_Comm comm);
 MPI_Comm smpi_comm_split(MPI_Comm comm, int color, int key);
 void smpi_comm_use(MPI_Comm comm);
 void smpi_comm_unuse(MPI_Comm comm);
+void smpi_comm_set_leaders_comm(MPI_Comm comm, MPI_Comm leaders);
+void smpi_comm_set_intra_comm(MPI_Comm comm, MPI_Comm leaders);
+int* smpi_comm_get_non_uniform_map(MPI_Comm comm);
+int* smpi_comm_get_leaders_map(MPI_Comm comm);
+MPI_Comm smpi_comm_get_leaders_comm(MPI_Comm comm);
+MPI_Comm smpi_comm_get_intra_comm(MPI_Comm comm);
+int smpi_comm_is_uniform(MPI_Comm comm);
+int smpi_comm_is_blocked(MPI_Comm comm);
+void smpi_comm_init_smp(MPI_Comm comm);
 
 MPI_Request smpi_mpi_send_init(void *buf, int count, MPI_Datatype datatype,
                                int dst, int tag, MPI_Comm comm);
@@ -330,6 +350,9 @@ int smpi_mpi_win_free( MPI_Win* win);
 
 MPI_Win smpi_mpi_win_create( void *base, MPI_Aint size, int disp_unit, MPI_Info info, MPI_Comm comm);
 
+void smpi_mpi_win_get_name(MPI_Win win, char* name, int* length);
+void smpi_mpi_win_set_name(MPI_Win win, char* name);
+
 int smpi_mpi_win_fence( int assert,  MPI_Win win);
 
 int smpi_mpi_get( void *origin_addr, int origin_count, MPI_Datatype origin_datatype, int target_rank,
@@ -370,7 +393,7 @@ extern char* start_data_exe; //start of the data+bss segment of the executable
 extern int size_data_exe; //size of the data+bss segment of the executable
 
 
-void switch_data_segment(int);
+void smpi_switch_data_segment(int);
 void smpi_get_executable_global_size(void);
 void smpi_initialize_global_memory_segments(void);
 void smpi_destroy_global_memory_segments(void);
@@ -468,6 +491,8 @@ void mpi_type_ub_(int* datatype, MPI_Aint * extent, int* ierr);
 void mpi_win_fence_( int* assert,  int* win, int* ierr);
 void mpi_win_free_( int* win, int* ierr);
 void mpi_win_create_( int *base, MPI_Aint* size, int* disp_unit, int* info, int* comm, int *win, int* ierr);
+void mpi_win_set_name_ (int*  win, char * name, int* ierr, int size);
+void mpi_win_get_name_ (int*  win, char * name, int* len, int* ierr);
 void mpi_info_create_( int *info, int* ierr);
 void mpi_info_set_( int *info, char *key, char *value, int* ierr);
 void mpi_info_free_(int* info, int* ierr);
@@ -490,7 +515,7 @@ void mpi_is_thread_main_ (int *flag, int* ierr);
 void mpi_address_ (void *location, MPI_Aint * address, int* ierr);
 void mpi_get_address_ (void *location, MPI_Aint * address, int* ierr);
 void mpi_type_dup_ (int*  datatype, int* newdatatype, int* ierr);
-void mpi_type_set_name_ (int*  datatype, char * name, int* ierr);
+void mpi_type_set_name_ (int*  datatype, char * name, int* ierr, int size);
 void mpi_type_get_name_ (int*  datatype, char * name, int* len, int* ierr);
 void mpi_type_get_attr_ (int* type, int* type_keyval, void *attribute_val, int* flag, int* ierr);
 void mpi_type_set_attr_ (int* type, int* type_keyval, void *attribute_val, int* ierr);
@@ -600,7 +625,7 @@ void mpi_type_match_size_ (int* typeclass,int* size,int*datatype, int* ierr);
 void mpi_alltoallw_ ( void *sendbuf, int *sendcnts, int *sdispls, int*sendtypes, void *recvbuf, int *recvcnts, int *rdispls, int*recvtypes,
  int* comm, int* ierr);
 void mpi_exscan_ (void *sendbuf, void *recvbuf, int* count, int* datatype, int* op, int* comm, int* ierr);
-void mpi_comm_set_name_ (int* comm, char* name, int* ierr);
+void mpi_comm_set_name_ (int* comm, char* name, int* ierr, int size);
 void mpi_comm_dup_with_info_ (int* comm, int* info, int* newcomm, int* ierr);
 void mpi_comm_split_type_ (int* comm, int* split_type, int* key, int* info, int*newcomm, int* ierr);
 void mpi_comm_set_info_ (int* comm, int* info, int* ierr);
@@ -665,7 +690,23 @@ void TRACE_smpi_finalize(int rank);
 const char* encode_datatype(MPI_Datatype datatype);
 
 // TODO, make this static and expose it more cleanly
-extern void** mappings;
-extern int loaded_page;
+
+typedef struct s_smpi_privatisation_region {
+  void* address;
+  int file_descriptor;
+} *smpi_privatisation_region_t;
+
+extern smpi_privatisation_region_t smpi_privatisation_regions;
+
+extern int smpi_loaded_page;
+
+int SIMIX_process_get_PID(smx_process_t self);
+
+static inline __attribute__ ((always_inline))
+int smpi_process_index_of_smx_process(smx_process_t process) {
+  return SIMIX_process_get_PID(process) -1;
+}
+
+SG_END_DECL()
 
 #endif