+ 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);
+ }
+}
+
+void smpi_global_destroy(void)
+{
+ int count = smpi_process_count();
+ int i;
+
+ smpi_bench_destroy();
+ 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);
+ simcall_rdv_destroy(process_data[i]->mailbox);
+ simcall_rdv_destroy(process_data[i]->mailbox_small);
+ xbt_free(process_data[i]);
+ }
+ xbt_free(process_data);
+ process_data = NULL;
+
+ smpi_free_static();
+}