void smpi_process_destroy(void);
void smpi_process_finalize(void);
int smpi_process_finalized(void);
+int smpi_process_initialized(void);
+void smpi_process_mark_as_initialized(void);
+
smpi_process_data_t smpi_process_data(void);
smpi_process_data_t smpi_process_remote_data(int index);
double simulated;
MPI_Comm comm_self;
void *data; /* user data */
+ int initialized;
} s_smpi_process_data_t;
static smpi_process_data_t *process_data = NULL;
// If finalized, this value has been set to -100;
}
+/**
+ * @brief Check if a process is initialized
+ */
+int smpi_process_initialized(void)
+{
+ int index = smpi_process_index();
+ return((index != -100) && (index!=MPI_UNDEFINED) && (process_data[index]->initialized));
+}
+
+/**
+ * @brief Mark a process as initialized (=MPI_Init called)
+ */
+void smpi_process_mark_as_initialized(void)
+{
+ int index = smpi_process_index();
+ if(index != -100)process_data[index]->initialized=1;
+}
+
#ifdef SMPI_F2C
int smpi_process_argc(void) {
process_data[i]->timer = xbt_os_timer_new();
group = smpi_group_new(1);
process_data[i]->comm_self = smpi_comm_new(group);
+ process_data[i]->initialized =0;
+
smpi_group_set_mapping(group, i, 0);
}
group = smpi_group_new(process_count);
int PMPI_Init(int *argc, char ***argv)
{
smpi_process_init(argc, argv);
+ smpi_process_mark_as_initialized();
#ifdef HAVE_TRACING
int rank = smpi_process_index();
TRACE_smpi_init(rank);
int PMPI_Initialized(int* flag) {
- *flag=(smpi_process_data()!=NULL);
+ *flag=smpi_process_initialized();
return MPI_SUCCESS;
}