// host info blank until sim starts
// FIXME: is this okay?
- smpi_global->hosts = NULL;
smpi_global->host_count = 0;
- // running hosts
- smpi_global->running_hosts_count_mutex = SIMIX_mutex_init();
- smpi_global->running_hosts_count = 0;
-
// mallocators
smpi_global->request_mallocator =
xbt_mallocator_new(SMPI_REQUEST_MALLOCATOR_SIZE, smpi_request_new,
xbt_mallocator_new(SMPI_MESSAGE_MALLOCATOR_SIZE, smpi_message_new,
smpi_message_free, smpi_message_reset);
- // queues
- smpi_global->pending_send_request_queues = xbt_new(xbt_fifo_t, size);
- smpi_global->pending_send_request_queues_mutexes =
- xbt_new(smx_mutex_t, size);
- smpi_global->pending_recv_request_queues = xbt_new(xbt_fifo_t, size);
- smpi_global->pending_recv_request_queues_mutexes =
- xbt_new(smx_mutex_t, size);
- smpi_global->received_message_queues = xbt_new(xbt_fifo_t, size);
- smpi_global->received_message_queues_mutexes = xbt_new(smx_mutex_t, size);
-
// sender/receiver processes
- smpi_global->sender_processes = xbt_new(smx_process_t, size);
- smpi_global->receiver_processes = xbt_new(smx_process_t, size);
+ smpi_global->main_processes = xbt_new(smx_process_t, size);
// timers
smpi_global->timer = xbt_os_timer_new();
smpi_global->do_once_duration = NULL;
smpi_global->do_once_mutex = SIMIX_mutex_init();
- for (i = 0; i < size; i++) {
- smpi_global->pending_send_request_queues[i] = xbt_fifo_new();
- smpi_global->pending_send_request_queues_mutexes[i] = SIMIX_mutex_init();
- smpi_global->pending_recv_request_queues[i] = xbt_fifo_new();
- smpi_global->pending_recv_request_queues_mutexes[i] = SIMIX_mutex_init();
- smpi_global->received_message_queues[i] = xbt_fifo_new();
- smpi_global->received_message_queues_mutexes[i] = SIMIX_mutex_init();
- }
-
- smpi_global->hosts = SIMIX_host_get_table();
smpi_global->host_count = SIMIX_host_get_number();
smpi_mpi_global = xbt_new(s_smpi_mpi_global_t, 1);
void smpi_global_destroy()
{
- int i;
-
- int size = SIMIX_host_get_number();
-
smpi_do_once_duration_node_t curr, next;
// processes
- xbt_free(smpi_global->sender_processes);
- xbt_free(smpi_global->receiver_processes);
-
- // running hosts
- SIMIX_mutex_destroy(smpi_global->running_hosts_count_mutex);
+ xbt_free(smpi_global->main_processes);
// mallocators
xbt_mallocator_free(smpi_global->request_mallocator);
SIMIX_mutex_destroy(smpi_global->do_once_mutex);
- for (i = 0; i < size; i++) {
- xbt_fifo_free(smpi_global->pending_send_request_queues[i]);
- SIMIX_mutex_destroy(smpi_global->pending_send_request_queues_mutexes[i]);
- xbt_fifo_free(smpi_global->pending_recv_request_queues[i]);
- SIMIX_mutex_destroy(smpi_global->pending_recv_request_queues_mutexes[i]);
- xbt_fifo_free(smpi_global->received_message_queues[i]);
- SIMIX_mutex_destroy(smpi_global->received_message_queues_mutexes[i]);
- }
+ xbt_free(smpi_global);
+ smpi_global = NULL;
- xbt_free(smpi_global->pending_send_request_queues);
- xbt_free(smpi_global->pending_send_request_queues_mutexes);
- xbt_free(smpi_global->pending_recv_request_queues);
- xbt_free(smpi_global->pending_recv_request_queues_mutexes);
- xbt_free(smpi_global->received_message_queues);
- xbt_free(smpi_global->received_message_queues_mutexes);
+ /* free smpi_mpi_global */
+ SIMIX_mutex_destroy(smpi_mpi_global->mpi_comm_world->barrier_mutex);
+ SIMIX_cond_destroy(smpi_mpi_global->mpi_comm_world->barrier_cond);
+ xbt_free(smpi_mpi_global->mpi_comm_world);
- xbt_free(smpi_global);
+ xbt_free(smpi_mpi_global->mpi_byte);
+ xbt_free(smpi_mpi_global->mpi_int);
+ xbt_free(smpi_mpi_global->mpi_double);
+
+ xbt_free(smpi_mpi_global->mpi_land);
+ xbt_free(smpi_mpi_global->mpi_sum);
+
+ xbt_free(smpi_mpi_global);
- smpi_global = NULL;
}
int smpi_host_index()
SIMIX_create_environment(argv[1]);
SIMIX_function_register("smpi_simulated_main", smpi_simulated_main);
- SIMIX_function_register("smpi_sender", smpi_sender);
- SIMIX_function_register("smpi_receiver", smpi_receiver);
SIMIX_launch_application(argv[2]);
// must initialize globals between creating environment and launching app....