snapshot->privatization_regions[i] =
MC_region_new(-1, mc_binary_info->start_rw, mappings[i], size_data_exe, ref_reg);
}
- snapshot->privatization_index = loaded_page;
+ snapshot->privatization_index = smpi_loaded_page;
snapshot->regions[2] = NULL;
} else
#endif
}
}
if(snapshot->privatization_index >= 0) {
- switch_data_segment(snapshot->privatization_index);
+ smpi_switch_data_segment(snapshot->privatization_index);
}
#endif
extern int size_data_exe; //size of the data+bss segment of the executable
-void switch_data_segment(int);
+void smpi_switch_data_segment(int);
void smpi_get_executable_global_size(void);
void smpi_initialize_global_memory_segments(void);
void smpi_destroy_global_memory_segments(void);
// TODO, make this static and expose it more cleanly
extern void** mappings;
-extern int loaded_page;
+extern int smpi_loaded_page;
int SIMIX_process_get_PID(smx_process_t self);
&& ((char*)request->buf >= start_data_exe)
&& ((char*)request->buf < start_data_exe + size_data_exe )){
XBT_DEBUG("Privatization : We are sending from a zone inside global memory. Switch data segment ");
- switch_data_segment(request->src);
+ smpi_switch_data_segment(request->src);
}
buf = xbt_malloc(request->size);
memcpy(buf,oldbuf,request->size);
&& ((char*)req->old_buf < start_data_exe + size_data_exe )
){
XBT_VERB("Privatization : We are unserializing to a zone in global memory - Switch data segment ");
- switch_data_segment(smpi_process_index());
+ smpi_switch_data_segment(smpi_process_index());
}
}
double smpi_cpu_threshold;
double smpi_running_power;
-int* fds;
-size_t mappings_count = 0;
+static int* fds;
void** mappings;
-int loaded_page = -1;
+int smpi_loaded_page = -1;
char* start_data_exe = NULL;
int size_data_exe = 0;
int smpi_privatize_global_variables;
}
}
-void switch_data_segment(int dest);
+void smpi_switch_data_segment(int dest);
void smpi_bench_begin(void)
{
- switch_data_segment(smpi_process_index());
+ smpi_switch_data_segment(smpi_process_index());
xbt_os_threadtimer_start(smpi_process_timer());
}
{
xbt_os_timer_t timer = smpi_process_timer();
xbt_os_threadtimer_stop(timer);
-// switch_data_segment(smpi_process_count());
+// smpi_switch_data_segment(smpi_process_count());
if (smpi_process_get_sampling()) {
XBT_CRITICAL("Cannot do recursive benchmarks.");
XBT_CRITICAL("Are you trying to make a call to MPI within a SMPI_SAMPLE_ block?");
shared_metadata_t* meta;
shared_data_t* data;
if (sg_cfg_get_boolean("smpi/use_shared_malloc")){
-
+
if (!allocs) {
XBT_WARN("Cannot free: nothing was allocated");
return;
-void switch_data_segment(int dest){
+void smpi_switch_data_segment(int dest){
if(size_data_exe == 0)//no need to switch
return;
- if (loaded_page==dest)//no need to switch either
+ if (smpi_loaded_page==dest)//no need to switch either
return;
#ifdef HAVE_MMAP
int i;
- if(loaded_page==-1){//initial switch, do the copy from the real page here
+ if(smpi_loaded_page==-1){//initial switch, do the copy from the real page here
for (i=0; i< SIMIX_process_count(); i++){
memcpy(mappings[i],TOPAGE(start_data_exe),size_data_exe);
}
void* tmp = mmap (TOPAGE(start_data_exe), size_data_exe, PROT_READ | PROT_WRITE, MAP_FIXED | MAP_SHARED, current, 0);
if (tmp != TOPAGE(start_data_exe))
xbt_die("Couldn't map the new region");
- loaded_page=dest;
+ smpi_loaded_page=dest;
#endif
}
found++;
}else if(strcmp(lfields[1], ".bss") == 0){
//the beginning of bss is not exactly the end of data if not aligned, grow bss reported size accordingly
- //TODO : check if this is OK, as some segments may be inserted between them..
+ //TODO : check if this is OK, as some segments may be inserted between them..
size_bss_binary = ((char*) strtoul(lfields[4], NULL, 16) - (start_data_exe + size_data_binary))
+ strtoul(lfields[2], NULL, 16);
found++;
#endif
}
-
int comm_size =smpi_comm_size(comm);
if(smpi_privatize_global_variables){ //we need to switch here, as the called function may silently touch global variables
- switch_data_segment(smpi_process_index());
+ smpi_switch_data_segment(smpi_process_index());
}
//identify neighbours in comm
//get the indexes of all processes sharing the same simix host
XBT_DEBUG("<%d> New process in the game: %p", index, proc);
if(smpi_privatize_global_variables){
- switch_data_segment(index);
+ smpi_switch_data_segment(index);
}
}
{
int index = smpi_process_index();
if(smpi_privatize_global_variables){
- switch_data_segment(index);
+ smpi_switch_data_segment(index);
}
process_data[index_to_process_data[index]]->state = SMPI_FINALIZED;
XBT_DEBUG("<%d> Process left the game", index);
&& ((char*)buff < start_data_exe + size_data_exe )
){
XBT_DEBUG("Privatization : We are copying from a zone inside global memory... Saving data to temp buffer !");
- switch_data_segment(((smpi_process_data_t)SIMIX_process_get_data(comm->comm.src_proc))->index);
+ smpi_switch_data_segment(((smpi_process_data_t)SIMIX_process_get_data(comm->comm.src_proc))->index);
tmpbuff = (void*)xbt_malloc(buff_size);
memcpy(tmpbuff, buff, buff_size);
}
&& ((char*)comm->comm.dst_buff < start_data_exe + size_data_exe )
){
XBT_DEBUG("Privatization : We are copying to a zone inside global memory - Switch data segment");
- switch_data_segment(((smpi_process_data_t)SIMIX_process_get_data(comm->comm.dst_proc))->index);
+ smpi_switch_data_segment(((smpi_process_data_t)SIMIX_process_get_data(comm->comm.dst_proc))->index);
}
{
int count;
if(smpi_privatize_global_variables){
- switch_data_segment(smpi_process_index());
+ smpi_switch_data_segment(smpi_process_index());
}
/* First check if we really have something to do */
if (recvcount > 0 && recvbuf != sendbuf) {
{
if(smpi_privatize_global_variables){ //we need to switch here, as the called function may silently touch global variables
XBT_VERB("Applying operation, switch to the right data frame ");
- switch_data_segment(smpi_process_index());
+ smpi_switch_data_segment(smpi_process_index());
}
if(!_xbt_replay_is_active())