#define MPI_COMM_NULL NULL
extern MPI_Comm MPI_COMM_WORLD;
+#define MPI_COMM_SELF smpi_process_comm_self()
struct s_smpi_mpi_request;
typedef struct s_smpi_mpi_request* MPI_Request;
*/
// smpi functions
XBT_IMPORT_NO_EXPORT(int) smpi_simulated_main(int argc, char** argv);
+XBT_PUBLIC(MPI_Comm) smpi_process_comm_self(void);
/*
XBT_PUBLIC(unsigned int) smpi_sleep(unsigned int);
XBT_PUBLIC(void) smpi_exit(int);
xbt_fifo_t pending_sent;
xbt_fifo_t pending_recv;
xbt_os_timer_t timer;
+ MPI_Comm comm_self;
} s_smpi_process_data_t;
static smpi_process_data_t* process_data = NULL;
return data->timer;
}
+MPI_Comm smpi_process_comm_self(void) {
+ smpi_process_data_t data = smpi_process_data();
+
+ return data->comm_self;
+}
+
void smpi_process_post_send(MPI_Comm comm, MPI_Request request) {
int index = smpi_group_index(smpi_comm_group(comm), request->dst);
smpi_process_data_t data = smpi_process_remote_data(index);
process_data[i]->pending_sent = xbt_fifo_new();
process_data[i]->pending_recv = xbt_fifo_new();
process_data[i]->timer = xbt_os_timer_new();
+ group = smpi_group_new(1);
+ process_data[i]->comm_self = smpi_comm_new(group);
+ smpi_group_set_mapping(group, i, 0);
}
group = smpi_group_new(process_count);
MPI_COMM_WORLD = smpi_comm_new(group);
smpi_comm_destroy(MPI_COMM_WORLD);
MPI_COMM_WORLD = MPI_COMM_NULL;
for(i = 0; i < count; i++) {
+ smpi_comm_destroy(process_data[i]->comm_self);
xbt_os_timer_free(process_data[i]->timer);
xbt_fifo_free(process_data[i]->pending_recv);
xbt_fifo_free(process_data[i]->pending_sent);