-/* Copyright (c) 2007-2014. The SimGrid Team.
+/* Copyright (c) 2007-2015. The SimGrid Team.
* All rights reserved. */
/* This program is free software; you can redistribute it and/or modify it
#ifndef SMPI_H
#define SMPI_H
+#include <simgrid_config.h>
+#ifdef HAVE_UNISTD_H
#include <unistd.h>
-#include <stddef.h>
+#endif
+#ifdef HAVE_SYS_TIME_H
#include <sys/time.h>
+#endif
+
+#include <stddef.h>
#include <xbt/misc.h>
#include <xbt/function_types.h>
#define MPI_ROOT 0
#define MPI_INFO_NULL NULL
#define MPI_COMM_TYPE_SHARED 1
-#define MPI_WIN_NULL NULL
+#define MPI_WIN_NULL ((MPI_Win)NULL)
#define MPI_VERSION 1
#define MPI_SUBVERSION 1
#define MPI_STATUS_IGNORE ((MPI_Status*)NULL)
#define MPI_STATUSES_IGNORE ((MPI_Status*)NULL)
-#define MPI_DATATYPE_NULL ((MPI_Datatype)NULL)
-XBT_PUBLIC_DATA( MPI_Datatype ) MPI_CHAR;
-XBT_PUBLIC_DATA( MPI_Datatype ) MPI_SHORT;
-XBT_PUBLIC_DATA( MPI_Datatype ) MPI_INT;
-XBT_PUBLIC_DATA( MPI_Datatype ) MPI_LONG;
-XBT_PUBLIC_DATA( MPI_Datatype ) MPI_LONG_LONG;
+#define MPI_DATATYPE_NULL ((const MPI_Datatype)NULL)
+XBT_PUBLIC_DATA( const MPI_Datatype ) MPI_CHAR;
+XBT_PUBLIC_DATA( const MPI_Datatype ) MPI_SHORT;
+XBT_PUBLIC_DATA( const MPI_Datatype ) MPI_INT;
+XBT_PUBLIC_DATA( const MPI_Datatype ) MPI_LONG;
+XBT_PUBLIC_DATA( const MPI_Datatype ) MPI_LONG_LONG;
#define MPI_LONG_LONG_INT MPI_LONG_LONG
-XBT_PUBLIC_DATA( MPI_Datatype ) MPI_SIGNED_CHAR;
-XBT_PUBLIC_DATA( MPI_Datatype ) MPI_UNSIGNED_CHAR;
-XBT_PUBLIC_DATA( MPI_Datatype ) MPI_UNSIGNED_SHORT;
-XBT_PUBLIC_DATA( MPI_Datatype ) MPI_UNSIGNED;
-XBT_PUBLIC_DATA( MPI_Datatype ) MPI_UNSIGNED_LONG;
-XBT_PUBLIC_DATA( MPI_Datatype ) MPI_UNSIGNED_LONG_LONG;
-XBT_PUBLIC_DATA( MPI_Datatype ) MPI_FLOAT;
-XBT_PUBLIC_DATA( MPI_Datatype ) MPI_DOUBLE;
-XBT_PUBLIC_DATA( MPI_Datatype ) MPI_LONG_DOUBLE;
-XBT_PUBLIC_DATA( MPI_Datatype ) MPI_WCHAR;
-XBT_PUBLIC_DATA( MPI_Datatype ) MPI_C_BOOL;
-XBT_PUBLIC_DATA( MPI_Datatype ) MPI_INT8_T;
-XBT_PUBLIC_DATA( MPI_Datatype ) MPI_INT16_T;
-XBT_PUBLIC_DATA( MPI_Datatype ) MPI_INT32_T;
-XBT_PUBLIC_DATA( MPI_Datatype ) MPI_INT64_T;
-XBT_PUBLIC_DATA( MPI_Datatype ) MPI_UINT8_T;
-XBT_PUBLIC_DATA( MPI_Datatype ) MPI_BYTE;
-XBT_PUBLIC_DATA( MPI_Datatype ) MPI_UINT16_T;
-XBT_PUBLIC_DATA( MPI_Datatype ) MPI_UINT32_T;
-XBT_PUBLIC_DATA( MPI_Datatype ) MPI_UINT64_T;
-XBT_PUBLIC_DATA( MPI_Datatype ) MPI_C_FLOAT_COMPLEX;
+XBT_PUBLIC_DATA( const MPI_Datatype ) MPI_SIGNED_CHAR;
+XBT_PUBLIC_DATA( const MPI_Datatype ) MPI_UNSIGNED_CHAR;
+XBT_PUBLIC_DATA( const MPI_Datatype ) MPI_UNSIGNED_SHORT;
+XBT_PUBLIC_DATA( const MPI_Datatype ) MPI_UNSIGNED;
+XBT_PUBLIC_DATA( const MPI_Datatype ) MPI_UNSIGNED_LONG;
+XBT_PUBLIC_DATA( const MPI_Datatype ) MPI_UNSIGNED_LONG_LONG;
+XBT_PUBLIC_DATA( const MPI_Datatype ) MPI_FLOAT;
+XBT_PUBLIC_DATA( const MPI_Datatype ) MPI_DOUBLE;
+XBT_PUBLIC_DATA( const MPI_Datatype ) MPI_LONG_DOUBLE;
+XBT_PUBLIC_DATA( const MPI_Datatype ) MPI_WCHAR;
+XBT_PUBLIC_DATA( const MPI_Datatype ) MPI_C_BOOL;
+XBT_PUBLIC_DATA( const MPI_Datatype ) MPI_INT8_T;
+XBT_PUBLIC_DATA( const MPI_Datatype ) MPI_INT16_T;
+XBT_PUBLIC_DATA( const MPI_Datatype ) MPI_INT32_T;
+XBT_PUBLIC_DATA( const MPI_Datatype ) MPI_INT64_T;
+XBT_PUBLIC_DATA( const MPI_Datatype ) MPI_UINT8_T;
+XBT_PUBLIC_DATA( const MPI_Datatype ) MPI_BYTE;
+XBT_PUBLIC_DATA( const MPI_Datatype ) MPI_UINT16_T;
+XBT_PUBLIC_DATA( const MPI_Datatype ) MPI_UINT32_T;
+XBT_PUBLIC_DATA( const MPI_Datatype ) MPI_UINT64_T;
+XBT_PUBLIC_DATA( const MPI_Datatype ) MPI_C_FLOAT_COMPLEX;
#define MPI_C_COMPLEX MPI_C_FLOAT_COMPLEX
-XBT_PUBLIC_DATA( MPI_Datatype ) MPI_C_DOUBLE_COMPLEX;
-XBT_PUBLIC_DATA( MPI_Datatype ) MPI_C_LONG_DOUBLE_COMPLEX;
-XBT_PUBLIC_DATA( MPI_Datatype ) MPI_AINT;
-XBT_PUBLIC_DATA( MPI_Datatype ) MPI_OFFSET;
-XBT_PUBLIC_DATA( MPI_Datatype ) MPI_LB;
-XBT_PUBLIC_DATA( MPI_Datatype ) MPI_UB;
+XBT_PUBLIC_DATA( const MPI_Datatype ) MPI_C_DOUBLE_COMPLEX;
+XBT_PUBLIC_DATA( const MPI_Datatype ) MPI_C_LONG_DOUBLE_COMPLEX;
+XBT_PUBLIC_DATA( const MPI_Datatype ) MPI_AINT;
+XBT_PUBLIC_DATA( const MPI_Datatype ) MPI_OFFSET;
+XBT_PUBLIC_DATA( const MPI_Datatype ) MPI_LB;
+XBT_PUBLIC_DATA( const MPI_Datatype ) MPI_UB;
//The following are datatypes for the MPI functions MPI_MAXLOC and MPI_MINLOC.
-XBT_PUBLIC_DATA(MPI_Datatype) MPI_FLOAT_INT;
-XBT_PUBLIC_DATA(MPI_Datatype) MPI_LONG_INT;
-XBT_PUBLIC_DATA(MPI_Datatype) MPI_DOUBLE_INT;
-XBT_PUBLIC_DATA(MPI_Datatype) MPI_SHORT_INT;
-XBT_PUBLIC_DATA(MPI_Datatype) MPI_2INT;
-XBT_PUBLIC_DATA(MPI_Datatype) MPI_LONG_DOUBLE_INT;
-XBT_PUBLIC_DATA(MPI_Datatype) MPI_2FLOAT;
-XBT_PUBLIC_DATA(MPI_Datatype) MPI_2DOUBLE;
-XBT_PUBLIC_DATA(MPI_Datatype) MPI_2LONG;//only for compatibility with Fortran
-
-XBT_PUBLIC_DATA(MPI_Datatype) MPI_REAL;
-XBT_PUBLIC_DATA(MPI_Datatype) MPI_REAL4;
-XBT_PUBLIC_DATA(MPI_Datatype) MPI_REAL8;
-XBT_PUBLIC_DATA(MPI_Datatype) MPI_REAL16;
-XBT_PUBLIC_DATA(MPI_Datatype) MPI_COMPLEX8;
-XBT_PUBLIC_DATA(MPI_Datatype) MPI_COMPLEX16;
-XBT_PUBLIC_DATA(MPI_Datatype) MPI_COMPLEX32;
-XBT_PUBLIC_DATA(MPI_Datatype) MPI_INTEGER1;
-XBT_PUBLIC_DATA(MPI_Datatype) MPI_INTEGER2;
-XBT_PUBLIC_DATA(MPI_Datatype) MPI_INTEGER4;
-XBT_PUBLIC_DATA(MPI_Datatype) MPI_INTEGER8;
-XBT_PUBLIC_DATA(MPI_Datatype) MPI_INTEGER16;
+XBT_PUBLIC_DATA( const MPI_Datatype ) MPI_FLOAT_INT;
+XBT_PUBLIC_DATA( const MPI_Datatype ) MPI_LONG_INT;
+XBT_PUBLIC_DATA( const MPI_Datatype ) MPI_DOUBLE_INT;
+XBT_PUBLIC_DATA( const MPI_Datatype ) MPI_SHORT_INT;
+XBT_PUBLIC_DATA( const MPI_Datatype ) MPI_2INT;
+XBT_PUBLIC_DATA( const MPI_Datatype ) MPI_LONG_DOUBLE_INT;
+XBT_PUBLIC_DATA( const MPI_Datatype ) MPI_2FLOAT;
+XBT_PUBLIC_DATA( const MPI_Datatype ) MPI_2DOUBLE;
+XBT_PUBLIC_DATA( const MPI_Datatype ) MPI_2LONG;//only for compatibility with Fortran
+
+XBT_PUBLIC_DATA( const MPI_Datatype ) MPI_REAL;
+XBT_PUBLIC_DATA( const MPI_Datatype ) MPI_REAL4;
+XBT_PUBLIC_DATA( const MPI_Datatype ) MPI_REAL8;
+XBT_PUBLIC_DATA( const MPI_Datatype ) MPI_REAL16;
+XBT_PUBLIC_DATA( const MPI_Datatype ) MPI_COMPLEX8;
+XBT_PUBLIC_DATA( const MPI_Datatype ) MPI_COMPLEX16;
+XBT_PUBLIC_DATA( const MPI_Datatype ) MPI_COMPLEX32;
+XBT_PUBLIC_DATA( const MPI_Datatype ) MPI_INTEGER1;
+XBT_PUBLIC_DATA( const MPI_Datatype ) MPI_INTEGER2;
+XBT_PUBLIC_DATA( const MPI_Datatype ) MPI_INTEGER4;
+XBT_PUBLIC_DATA( const MPI_Datatype ) MPI_INTEGER8;
+XBT_PUBLIC_DATA( const MPI_Datatype ) MPI_INTEGER16;
//for now we only send int values at max
#define MPI_Count int
typedef MPI_Comm_errhandler_function MPI_Comm_errhandler_fn;
#define MPI_INFO_ENV 1
-XBT_PUBLIC_DATA(MPI_Datatype) MPI_PACKED;
+XBT_PUBLIC_DATA( const MPI_Datatype ) MPI_PACKED;
XBT_PUBLIC_DATA(MPI_Errhandler*) MPI_ERRORS_RETURN;
XBT_PUBLIC_DATA(MPI_Errhandler*) MPI_ERRORS_ARE_FATAL;
XBT_PUBLIC_DATA(MPI_Errhandler*) MPI_ERRHANDLER_NULL;
// smpi functions
XBT_PUBLIC(int) smpi_global_size(void);
XBT_PUBLIC(MPI_Comm) smpi_process_comm_self(void);
+XBT_PUBLIC(void*) smpi_process_get_user_data(void);
+XBT_PUBLIC(void) smpi_process_set_user_data(void *);
/*
XBT_PUBLIC(void) smpi_exit(int);
*/
XBT_PUBLIC(double) smpi_get_host_current_power_peak(void);
XBT_PUBLIC(int) smpi_get_host_nb_pstates(void);
XBT_PUBLIC(void) smpi_set_host_pstate(int pstate_index);
+XBT_PUBLIC(int) smpi_get_host_pstate(void);
+
XBT_PUBLIC(double) smpi_get_host_consumed_energy(void);
XBT_PUBLIC(int) smpi_usleep(useconds_t usecs);
XBT_PUBLIC(void) smpi_process_init(int *argc, char ***argv);
/* 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);
+XBT_PUBLIC(void) smpi_replay_run(int *argc, char***argv);
XBT_PUBLIC(void) SMPI_app_instance_register(const char *name, xbt_main_func_t code, int num_processes);
XBT_PUBLIC(void) SMPI_init(void);