X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/67ef913cd395f640c512a7b4e695ceef1c7e2600..84402e8e2ee2a2d0bef25fdceb0a263ed8b471f6:/src/smpi/plugins/ampi/ampi.cpp diff --git a/src/smpi/plugins/ampi/ampi.cpp b/src/smpi/plugins/ampi/ampi.cpp index bf579e49b6..be0d713f08 100644 --- a/src/smpi/plugins/ampi/ampi.cpp +++ b/src/smpi/plugins/ampi/ampi.cpp @@ -1,20 +1,26 @@ +/* Copyright (c) 2018-2020. The SimGrid Team. All rights reserved. */ + +/* This program is free software; you can redistribute it and/or modify it + * under the terms of the license (GNU LGPL) which comes with this package. */ + #include #include -#include +#include #include +#include #include -#include #include +#include -XBT_LOG_NEW_DEFAULT_SUBCATEGORY(plugin_pampi, smpi, "Logging specific to the AMPI functions"); +#include "ampi.hpp" +#include static std::vector memory_size(500, 0); // FIXME cheinrich This needs to be dynamic static std::map alloc_table; // Keep track of all allocations -extern "C" void* _sampi_malloc(size_t); -extern "C" void _sampi_free(void* ptr); + extern "C" void* _sampi_malloc(size_t size) { - void* result = malloc (size); // We need the space here to prevent recursive substitution + void* result = xbt_malloc(size); alloc_table.insert({result, size}); if (not simgrid::s4u::this_actor::is_maestro()) { memory_size[simgrid::s4u::this_actor::get_pid()] += size; @@ -27,16 +33,36 @@ extern "C" void _sampi_free(void* ptr) size_t alloc_size = alloc_table.at(ptr); int my_proc_id = simgrid::s4u::this_actor::get_pid(); memory_size[my_proc_id] -= alloc_size; - free(ptr); + xbt_free(ptr); +} + +extern "C" void* _sampi_calloc(size_t num_elm, size_t elem_size) +{ + void* result = xbt_malloc0(num_elm * elem_size); + alloc_table.insert({result, num_elm * elem_size}); + if (not simgrid::s4u::this_actor::is_maestro()) { + memory_size[simgrid::s4u::this_actor::get_pid()] += num_elm * elem_size; + } + return result; +} +extern "C" void* _sampi_realloc(void* ptr, size_t size) +{ + void* result = xbt_realloc(ptr, size); + int old_size = alloc_table.at(ptr); + alloc_table.erase(ptr); + alloc_table.insert({result, size}); + if (not simgrid::s4u::this_actor::is_maestro()) { + memory_size[simgrid::s4u::this_actor::get_pid()] += size - old_size; + } + return result; } -#include namespace simgrid { namespace smpi { namespace plugin { namespace ampi { - simgrid::xbt::signal on_iteration_in; - simgrid::xbt::signal on_iteration_out; +simgrid::xbt::signal on_iteration_in; +simgrid::xbt::signal on_iteration_out; } } }