int smpi_universe_size = 0;
int* index_to_process_data = nullptr;
extern double smpi_total_benched_time;
+extern xbt_dict_t smpi_type_keyvals;
+extern xbt_dict_t smpi_comm_keyvals;
xbt_os_timer_t global_timer;
MPI_Comm MPI_COMM_WORLD = MPI_COMM_UNINITIALIZED;
MPI_Errhandler *MPI_ERRORS_RETURN = nullptr;
void smpi_process_init(int *argc, char ***argv)
{
- int index=-1;
- smpi_process_data_t data;
- smx_process_t proc;
if (argc != nullptr && argv != nullptr) {
- proc = SIMIX_process_self();
- SIMIX_process_set_cleanup_function(proc, MSG_process_cleanup_from_SIMIX);
+ smx_actor_t proc = SIMIX_process_self();
+ proc->context->set_cleanup(&MSG_process_cleanup_from_SIMIX);
char* instance_id = (*argv)[1];
int rank = xbt_str_parse_int((*argv)[2], "Invalid rank: %s");
- index = smpi_process_index_of_smx_process(proc);
+ int index = smpi_process_index_of_smx_process(proc);
if(index_to_process_data == nullptr){
index_to_process_data=static_cast<int*>(xbt_malloc(SIMIX_process_count()*sizeof(int)));
MPI_Comm* temp_comm_world;
xbt_bar_t temp_bar;
smpi_deployment_register_process(instance_id, rank, index, &temp_comm_world, &temp_bar);
- data = smpi_process_remote_data(index);
- data->comm_world = temp_comm_world;
+ smpi_process_data_t data = smpi_process_remote_data(index);
+ data->comm_world = temp_comm_world;
if(temp_bar != nullptr)
data->finalization_barrier = temp_bar;
data->index = index;
XBT_DEBUG("<%d> New process in the game: %p", index, proc);
}
xbt_assert(smpi_process_data(),
- "smpi_process_data() returned nullptr. You probably gave a nullptr parameter to MPI_Init. Although it's required by "
- "MPI-2, this is currently not supported by SMPI.");
+ "smpi_process_data() returned nullptr. You probably gave a nullptr parameter to MPI_Init. "
+ "Although it's required by MPI-2, this is currently not supported by SMPI.");
}
void smpi_process_destroy()
message, request, request->buf, request->size, request->src, request->dst, request->tag, request->flags);
}
-void smpi_comm_copy_buffer_callback(smx_synchro_t synchro, void *buff, size_t buff_size)
+void smpi_comm_copy_buffer_callback(smx_activity_t synchro, void *buff, size_t buff_size)
{
XBT_DEBUG("Copy the data over");
void* tmpbuff=buff;
- simgrid::simix::Comm *comm = dynamic_cast<simgrid::simix::Comm*>(synchro);
+ simgrid::kernel::activity::Comm *comm = dynamic_cast<simgrid::kernel::activity::Comm*>(synchro);
if((smpi_privatize_global_variables) && (static_cast<char*>(buff) >= smpi_start_data_exe)
&& (static_cast<char*>(buff) < smpi_start_data_exe + smpi_size_data_exe )
if(tmpbuff!=buff)xbt_free(tmpbuff);
}
-void smpi_comm_null_copy_buffer_callback(smx_synchro_t comm, void *buff, size_t buff_size)
+void smpi_comm_null_copy_buffer_callback(smx_activity_t comm, void *buff, size_t buff_size)
{
return;
}
}
xbt_free(index_to_process_data);
+ if(smpi_type_keyvals!=nullptr)
+ xbt_dict_free(&smpi_type_keyvals);
+ if(smpi_comm_keyvals!=nullptr)
+ xbt_dict_free(&smpi_comm_keyvals);
if(smpi_privatize_global_variables)
smpi_destroy_global_memory_segments();
smpi_free_static();