+void smpi_global_init(void)
+{
+ int i;
+ MPI_Group group;
+ char name[MAILBOX_NAME_MAXLEN];
+
+ SIMIX_comm_set_copy_data_callback(&SMPI_comm_copy_buffer_callback);
+ process_count = SIMIX_process_count();
+ process_data = xbt_new(smpi_process_data_t, process_count);
+ for (i = 0; i < process_count; i++) {
+ process_data[i] = xbt_new(s_smpi_process_data_t, 1);
+ process_data[i]->index = i;
+ process_data[i]->argc = NULL;
+ process_data[i]->argv = NULL;
+ process_data[i]->mailbox = simcall_rdv_create(get_mailbox_name(name, i));
+ process_data[i]->mailbox_small = simcall_rdv_create(get_mailbox_name_small(name, i));
+ 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);
+ for (i = 0; i < process_count; i++) {
+ smpi_group_set_mapping(group, i, i);
+ }
+}