Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
rewrite the MPI execution sampling facility (previous implem was deeply bugged)
[simgrid.git] / include / smpi / smpi.h
index b12a551..b2267a7 100644 (file)
 #include <xbt/misc.h>
 #include <xbt/function_types.h>
 
+#define sleep(x) smpi_sleep(x)
+#define gettimeofday(x, y) smpi_gettimeofday(x, y)
+
 #define MPI_CALL(type,name,args) \
-  type name args; \
+  type name args __attribute__((weak)); \
   type P##name args
 
 SG_BEGIN_DECL()
@@ -23,6 +26,7 @@ SG_BEGIN_DECL()
 #define MPI_THREAD_MULTIPLE   3
 //FIXME: check values
 #define MPI_MAX_PROCESSOR_NAME 100
+#define MPI_MAX_NAME_STRING    100
 #define MPI_MAX_ERROR_STRING   100
 #define MPI_MAX_DATAREP_STRIN  100
 #define MPI_MAX_INFO_KEY       100
@@ -67,6 +71,7 @@ typedef struct {
 } MPI_Status;
 
 #define MPI_STATUS_IGNORE NULL
+#define MPI_STATUSES_IGNORE NULL
 
 #define MPI_DATATYPE_NULL NULL
 extern MPI_Datatype MPI_CHAR;
@@ -208,6 +213,7 @@ MPI_CALL(XBT_PUBLIC(int), MPI_Group_range_excl,
 
 MPI_CALL(XBT_PUBLIC(int), MPI_Comm_rank, (MPI_Comm comm, int *rank));
 MPI_CALL(XBT_PUBLIC(int), MPI_Comm_size, (MPI_Comm comm, int *size));
+MPI_CALL(XBT_PUBLIC(int), MPI_Comm_get_name, (MPI_Comm comm, char* name, int* len));
 MPI_CALL(XBT_PUBLIC(int), MPI_Get_processor_name, (char *name, int *resultlen));
 MPI_CALL(XBT_PUBLIC(int), MPI_Get_count,
                             (MPI_Status * status, MPI_Datatype datatype,
@@ -220,6 +226,7 @@ MPI_CALL(XBT_PUBLIC(int), MPI_Comm_dup, (MPI_Comm comm, MPI_Comm * newcomm));
 MPI_CALL(XBT_PUBLIC(int), MPI_Comm_create,
                             (MPI_Comm comm, MPI_Group group, MPI_Comm * newcomm));
 MPI_CALL(XBT_PUBLIC(int), MPI_Comm_free, (MPI_Comm * comm));
+MPI_CALL(XBT_PUBLIC(int), MPI_Comm_disconnect, (MPI_Comm * comm));
 MPI_CALL(XBT_PUBLIC(int), MPI_Comm_split, (MPI_Comm comm, int color, int key, MPI_Comm* comm_out));
 
 MPI_CALL(XBT_PUBLIC(int), MPI_Send_init,
@@ -418,19 +425,21 @@ XBT_PUBLIC(void) smpi_exit(int);
 
 XBT_PUBLIC(unsigned int) smpi_sleep(unsigned int secs);
 XBT_PUBLIC(int) smpi_gettimeofday(struct timeval *tv, struct timezone *tz);
+XBT_PUBLIC(unsigned long long) smpi_rastro_resolution (void);
+XBT_PUBLIC(unsigned long long) smpi_rastro_timestamp (void);
 XBT_PUBLIC(void) smpi_sample_1(int global, const char *file, int line,
-                               int max);
+                              int iters, double threshold);
 XBT_PUBLIC(int) smpi_sample_2(int global, const char *file, int line);
 XBT_PUBLIC(void) smpi_sample_3(int global, const char *file, int line);
 XBT_PUBLIC(void) smpi_sample_flops(double flops);
 
-#define SMPI_SAMPLE_LOCAL(num) for(smpi_sample_1(0, __FILE__, __LINE__, num); \
-                                   smpi_sample_2(0, __FILE__, __LINE__);      \
-                                   smpi_sample_3(0, __FILE__, __LINE__))
+#define SMPI_SAMPLE_LOCAL(iters,thres) for(smpi_sample_1(0, __FILE__, __LINE__, iters, thres); \
+                                           smpi_sample_2(0, __FILE__, __LINE__);      \
+                                           smpi_sample_3(0, __FILE__, __LINE__))
 
-#define SMPI_SAMPLE_GLOBAL(num) for(smpi_sample_1(1, __FILE__, __LINE__, num); \
-                                    smpi_sample_2(1, __FILE__, __LINE__);      \
-                                    smpi_sample_3(1, __FILE__, __LINE__))
+#define SMPI_SAMPLE_GLOBAL(iters,thres) for(smpi_sample_1(1, __FILE__, __LINE__, iters, thres); \
+                                            smpi_sample_2(1, __FILE__, __LINE__);      \
+                                            smpi_sample_3(1, __FILE__, __LINE__))
 
 #define SMPI_SAMPLE_DELAY(flops) for(smpi_sample_flops(flops); 0; )
 
@@ -441,8 +450,22 @@ XBT_PUBLIC(void *) smpi_shared_malloc(size_t size, const char *file,
 XBT_PUBLIC(void) smpi_shared_free(void *data);
 #define SMPI_SHARED_FREE(data) smpi_shared_free(data)
 
+XBT_PUBLIC(int) smpi_shared_known_call(const char* func, const char* input);
+XBT_PUBLIC(void*) smpi_shared_get_call(const char* func, const char* input);
+XBT_PUBLIC(void*) smpi_shared_set_call(const char* func, const char* input, void* data);
+#define SMPI_SHARED_CALL(func, input, ...) \
+   (smpi_shared_known_call(#func, input) ? smpi_shared_get_call(#func, input) \
+                                         : smpi_shared_set_call(#func, input, func(__VA_ARGS__)))
+
 /* Fortran specific stuff */
 XBT_PUBLIC(int) MAIN__(void);
 
+XBT_PUBLIC(int) smpi_process_index(void);
+
+/* Trace replay specific stuff */
+XBT_PUBLIC(void) smpi_replay_init(int *argc, char***argv);
+XBT_PUBLIC(void) smpi_action_trace_run(char *);
+XBT_PUBLIC(int) smpi_replay_finalize(void);
+
 SG_END_DECL()
 #endif