#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
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,
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,
XBT_PUBLIC(unsigned int) smpi_sleep(unsigned int secs);
XBT_PUBLIC(int) smpi_gettimeofday(struct timeval *tv, struct timezone *tz);
-XBT_PUBLIC(void) smpi_sample_1(int global, const char *file, int line,
- int max);
+XBT_PUBLIC(int) smpi_sample_1(int global, const char *file, int line,
+ 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; )
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);
+
SG_END_DECL()
#endif