extern XBT_PRIVATE char* smpi_data_exe_start; // start of the data+bss segment of the executable
extern XBT_PRIVATE int smpi_data_exe_size; // size of the data+bss segment of the executable
-enum shared_malloc_type { shmalloc_none, shmalloc_local, shmalloc_global };
-extern XBT_PRIVATE shared_malloc_type smpi_cfg_shared_malloc; // Whether to activate shared malloc
+enum class SharedMallocType { NONE, LOCAL, GLOBAL };
+extern XBT_PRIVATE SharedMallocType smpi_cfg_shared_malloc; // Whether to activate shared malloc
XBT_PRIVATE void smpi_switch_data_segment(simgrid::s4u::ActorPtr actor);
XBT_PRIVATE void smpi_really_switch_data_segment(simgrid::s4u::ActorPtr actor);
std::string val = simgrid::config::get_value<std::string>("smpi/shared-malloc");
if ((val == "yes") || (val == "1") || (val == "on") || (val == "global")) {
- smpi_cfg_shared_malloc = shmalloc_global;
+ smpi_cfg_shared_malloc = SharedMallocType::GLOBAL;
} else if (val == "local") {
- smpi_cfg_shared_malloc = shmalloc_local;
+ smpi_cfg_shared_malloc = SharedMallocType::LOCAL;
} else if ((val == "no") || (val == "0") || (val == "off")) {
- smpi_cfg_shared_malloc = shmalloc_none;
+ smpi_cfg_shared_malloc = SharedMallocType::NONE;
} else {
xbt_die("Invalid value '%s' for option smpi/shared-malloc. Possible values: 'on' or 'global', 'local', 'off'",
val.c_str());
}
void *smpi_shared_malloc(size_t size, const char *file, int line) {
- if (size > 0 && smpi_cfg_shared_malloc == shmalloc_local) {
+ if (size > 0 && smpi_cfg_shared_malloc == SharedMallocType::LOCAL) {
return smpi_shared_malloc_local(size, file, line);
- } else if (smpi_cfg_shared_malloc == shmalloc_global) {
+ } else if (smpi_cfg_shared_malloc == SharedMallocType::GLOBAL) {
int nb_shared_blocks = 1;
size_t shared_block_offsets[2] = {0, size};
return smpi_shared_malloc_partial(size, shared_block_offsets, nb_shared_blocks);
private_blocks.clear(); // being paranoid
if (allocs_metadata.empty())
return 0;
- if ( smpi_cfg_shared_malloc == shmalloc_local || smpi_cfg_shared_malloc == shmalloc_global) {
+ if (smpi_cfg_shared_malloc == SharedMallocType::LOCAL || smpi_cfg_shared_malloc == SharedMallocType::GLOBAL) {
auto low = allocs_metadata.lower_bound(ptr);
if (low != allocs_metadata.end() && low->first == ptr) {
private_blocks = low->second.private_blocks;
void smpi_shared_free(void *ptr)
{
- if (smpi_cfg_shared_malloc == shmalloc_local) {
+ if (smpi_cfg_shared_malloc == SharedMallocType::LOCAL) {
char loc[PTR_STRLEN];
snprintf(loc, PTR_STRLEN, "%p", ptr);
auto meta = allocs_metadata.find(ptr);
XBT_DEBUG("Shared free - no removal - of %p, count = %d", ptr, data->count);
}
- } else if (smpi_cfg_shared_malloc == shmalloc_global) {
+ } else if (smpi_cfg_shared_malloc == SharedMallocType::GLOBAL) {
auto meta = allocs_metadata.find(ptr);
if (meta != allocs_metadata.end()){
meta->second.data->second.count--;