A
lgorithmique
N
umérique
D
istribuée
Public GIT Repository
projects
/
simgrid.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge branch 'master' of scm.gforge.inria.fr:/gitroot/simgrid/simgrid
[simgrid.git]
/
src
/
smpi
/
smpi_global.cpp
diff --git
a/src/smpi/smpi_global.cpp
b/src/smpi/smpi_global.cpp
index
1c84fbc
..
2e95353
100644
(file)
--- a/
src/smpi/smpi_global.cpp
+++ b/
src/smpi/smpi_global.cpp
@@
-15,14
+15,16
@@
#include "simgrid/sg_config.h"
#include "src/mc/mc_replay.h"
#include "src/msg/msg_private.h"
#include "simgrid/sg_config.h"
#include "src/mc/mc_replay.h"
#include "src/msg/msg_private.h"
-#include "src/
simix
/SynchroComm.hpp"
+#include "src/
kernel/activity
/SynchroComm.hpp"
-
-#include <float.h> /* DBL_MAX */
+#include <float.h> /* DBL_MAX */
+#include <fstream>
+#include <map>
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
-#include <fstream>
+#include <string>
+#include <vector>
XBT_LOG_NEW_DEFAULT_SUBCATEGORY(smpi_kernel, smpi, "Logging specific to SMPI (kernel)");
#include <boost/tokenizer.hpp>
XBT_LOG_NEW_DEFAULT_SUBCATEGORY(smpi_kernel, smpi, "Logging specific to SMPI (kernel)");
#include <boost/tokenizer.hpp>
@@
-59,7
+61,7
@@
typedef struct s_smpi_process_data {
bool replaying; /* is the process replaying a trace */
xbt_bar_t finalization_barrier;
int return_value;
bool replaying; /* is the process replaying a trace */
xbt_bar_t finalization_barrier;
int return_value;
- smpi_trace_call_location_t
*
trace_call_loc;
+ smpi_trace_call_location_t trace_call_loc;
#if HAVE_PAPI
/** Contains hardware data as read by PAPI **/
int papi_event_set;
#if HAVE_PAPI
/** Contains hardware data as read by PAPI **/
int papi_event_set;
@@
-72,6
+74,8
@@
int process_count = 0;
int smpi_universe_size = 0;
int* index_to_process_data = nullptr;
extern double smpi_total_benched_time;
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;
xbt_os_timer_t global_timer;
MPI_Comm MPI_COMM_WORLD = MPI_COMM_UNINITIALIZED;
MPI_Errhandler *MPI_ERRORS_RETURN = nullptr;
@@
-94,16
+98,13
@@
static char *get_mailbox_name_small(char *str, int index)
void smpi_process_init(int *argc, char ***argv)
{
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) {
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");
char* instance_id = (*argv)[1];
int rank = xbt_str_parse_int((*argv)[2], "Invalid rank: %s");
- index = smpi_process_index_of_smx_process(proc);
+ in
t in
dex = 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)));
if(index_to_process_data == nullptr){
index_to_process_data=static_cast<int*>(xbt_malloc(SIMIX_process_count()*sizeof(int)));
@@
-119,8
+120,8
@@
void smpi_process_init(int *argc, char ***argv)
MPI_Comm* temp_comm_world;
xbt_bar_t temp_bar;
smpi_deployment_register_process(instance_id, rank, index, &temp_comm_world, &temp_bar);
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;
if(temp_bar != nullptr)
data->finalization_barrier = temp_bar;
data->index = index;
@@
-143,8
+144,8
@@
void smpi_process_init(int *argc, char ***argv)
XBT_DEBUG("<%d> New process in the game: %p", index, proc);
}
xbt_assert(smpi_process_data(),
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()
}
void smpi_process_destroy()
@@
-256,7
+257,7
@@
int smpi_process_count()
smpi_trace_call_location_t* smpi_process_get_call_location()
{
smpi_process_data_t process_data = smpi_process_data();
smpi_trace_call_location_t* smpi_process_get_call_location()
{
smpi_process_data_t process_data = smpi_process_data();
- return process_data->trace_call_loc;
+ return
&
process_data->trace_call_loc;
}
int smpi_process_index()
}
int smpi_process_index()
@@
-383,11
+384,11
@@
void print_request(const char *message, MPI_Request request)
message, request, request->buf, request->size, request->src, request->dst, request->tag, request->flags);
}
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;
{
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((smpi_privatize_global_variables) && (static_cast<char*>(buff) >= smpi_start_data_exe)
&& (static_cast<char*>(buff) < smpi_start_data_exe + smpi_size_data_exe )
@@
-419,7
+420,7
@@
void smpi_comm_copy_buffer_callback(smx_synchro_t synchro, void *buff, size_t bu
if(tmpbuff!=buff)xbt_free(tmpbuff);
}
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;
}
{
return;
}
@@
-567,10
+568,6
@@
void smpi_global_init()
process_data[i]->finalization_barrier = nullptr;
process_data[i]->return_value = 0;
process_data[i]->finalization_barrier = nullptr;
process_data[i]->return_value = 0;
- if (xbt_cfg_get_boolean("smpi/trace-call-location")) {
- process_data[i]->trace_call_loc = xbt_new(smpi_trace_call_location_t, 1);
- }
-
#if HAVE_PAPI
if (xbt_cfg_get_string("smpi/papi-events")[0] != '\0') {
// TODO: Implement host/process/thread based counters. This implementation
#if HAVE_PAPI
if (xbt_cfg_get_string("smpi/papi-events")[0] != '\0') {
// TODO: Implement host/process/thread based counters. This implementation
@@
-624,9
+621,6
@@
void smpi_global_destroy()
}
xbt_os_timer_free(process_data[i]->timer);
xbt_mutex_destroy(process_data[i]->mailboxes_mutex);
}
xbt_os_timer_free(process_data[i]->timer);
xbt_mutex_destroy(process_data[i]->mailboxes_mutex);
- if (xbt_cfg_get_boolean("smpi/trace-call-location")) {
- xbt_free(process_data[i]->trace_call_loc);
- }
delete process_data[i];
}
delete[] process_data;
delete process_data[i];
}
delete[] process_data;
@@
-647,6
+641,10
@@
void smpi_global_destroy()
}
xbt_free(index_to_process_data);
}
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();
if(smpi_privatize_global_variables)
smpi_destroy_global_memory_segments();
smpi_free_static();