Skip to content

Commit

Permalink
isolate the leak
Browse files Browse the repository at this point in the history
  • Loading branch information
rrsettgast committed Feb 7, 2025
1 parent 9f0175e commit d5a82f0
Show file tree
Hide file tree
Showing 2 changed files with 90 additions and 23 deletions.
36 changes: 32 additions & 4 deletions src/coreComponents/mesh/FieldIdentifiers.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -54,9 +54,27 @@ class FieldIdentifiers
*/
void addFields( FieldLocation const location, std::vector< string > const & fieldNames )
{
// struct rusage usage0, usage1, usage2, usage3;

// getrusage(RUSAGE_SELF, &usage0);
string key;
// getrusage(RUSAGE_SELF, &usage1);
generateKey( location, key );
// getrusage(RUSAGE_SELF, &usage2);
addFields( fieldNames, key );
// getrusage(RUSAGE_SELF, &usage3);

// if( usage0.ru_maxrss != usage1.ru_maxrss ||
// usage1.ru_maxrss != usage2.ru_maxrss ||
// usage2.ru_maxrss != usage3.ru_maxrss )
// {
// printf( " usage: %ld %ld %ld %ld \n",
// usage0.ru_maxrss,
// usage1.ru_maxrss,
// usage2.ru_maxrss,
// usage3.ru_maxrss );
// }

}
/**
* @brief adds element-based fields to the fields map using the element region names to define keys.
Expand All @@ -78,9 +96,19 @@ class FieldIdentifiers
*
* @return std::map< string, array1d< string > > const&
*/
std::map< string, array1d< string > > const & getFields() const
std::map< string, array1d< string > > getFields() const
{
return m_fields;
// return m_fields;
std::map< string, array1d< string > > rval;
for( auto const & [key, fields] : m_fields )
{
for( auto const & field : fields )
{
rval[key].emplace_back( field );
}
}

return rval;
}
/**
* @brief Get the Region Name object
Expand Down Expand Up @@ -128,7 +156,7 @@ class FieldIdentifiers

private:
///
std::map< string, array1d< string > > m_fields;
std::map< string, std::vector< string > > m_fields;

struct keysStruct
{
Expand Down Expand Up @@ -192,7 +220,7 @@ class FieldIdentifiers
* @param fieldNames list of the names of the fields to sync
* @param key key used to registered teh fields in the map.
*/
void addFields( std::vector< string > const fieldNames, string const key )
void addFields( std::vector< string > const & fieldNames, string const & key )
{
for( string const & field : fieldNames )
{
Expand Down
77 changes: 58 additions & 19 deletions src/coreComponents/unitTests/wavePropagationTests/testMemLeak.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -193,31 +193,70 @@ TEST_F( AcousticWaveEquationSEMTest, SeismoTrace )
DomainPartition & domain = state.getProblemManager().getDomainPartition();
propagator = &state.getProblemManager().getPhysicsSolverManager().getGroup< AcousticWaveEquationSEM >( "acousticSolver" );

struct rusage usage;


for(int i = 0; i < 1000000; i++ )



printf( " usage0 usage1 usage2 usage3 usage4 usage5 usage6 \n");
for(int i = 0; i < 10000; i++ )
{
if( i % 1000 == 0 )
{
getrusage(RUSAGE_SELF, &usage);
std::cout << "Memory usage before synchronization " << i << ": " << usage.ru_maxrss << " KB" << std::endl;
}
struct rusage usage0;
struct rusage usage1;
struct rusage usage2;
struct rusage usage3;
struct rusage usage4;
struct rusage usage5;
struct rusage usage6;

getrusage(RUSAGE_SELF, &usage0);

FieldIdentifiers fieldsToBeSync;
getrusage(RUSAGE_SELF, &usage1);
fieldsToBeSync.addFields( FieldLocation::Node, { fields::acousticfields::Pressure_np1::key() } );
getrusage(RUSAGE_SELF, &usage2);
CommunicationTools & syncFields = CommunicationTools::getInstance();

getrusage(RUSAGE_SELF, &usage3);

MeshLevel * meshLevel;
propagator->forDiscretizationOnMeshTargets( domain.getMeshBodies(), [&] ( string const &,
MeshLevel & mesh,
arrayView1d< string const > const & )
MeshLevel & mesh,
arrayView1d< string const > const & )
{
FieldIdentifiers fieldsToBeSync;
fieldsToBeSync.addFields( FieldLocation::Node, { fields::acousticfields::Pressure_np1::key() } );
CommunicationTools & syncFields = CommunicationTools::getInstance();
syncFields.synchronizeFields( fieldsToBeSync,
mesh,
domain.getNeighbors(),
true );
meshLevel = &mesh;
} );
if( i % 1000 == 0 )
MeshLevel & mesh = *meshLevel;

{

getrusage(RUSAGE_SELF, &usage4);
syncFields.synchronizeFields( fieldsToBeSync,
mesh,
domain.getNeighbors(),
true );

getrusage(RUSAGE_SELF, &usage5);
}// );

getrusage(RUSAGE_SELF, &usage6);

if( usage0.ru_maxrss != usage1.ru_maxrss ||
usage1.ru_maxrss != usage2.ru_maxrss ||
usage2.ru_maxrss != usage3.ru_maxrss ||
usage3.ru_maxrss != usage4.ru_maxrss ||
usage4.ru_maxrss != usage5.ru_maxrss ||
usage5.ru_maxrss != usage6.ru_maxrss )
{
getrusage(RUSAGE_SELF, &usage);
std::cout << "Memory usage after synchronization " << i << ": " << usage.ru_maxrss << " KB" << std::endl;
printf( "Cycle %6d Memory usage: %ld %ld %ld %ld %ld %ld %ld \n",
i,
usage0.ru_maxrss,
usage1.ru_maxrss,
usage2.ru_maxrss,
usage3.ru_maxrss,
usage4.ru_maxrss,
usage5.ru_maxrss,
usage6.ru_maxrss );
}
}
ASSERT_TRUE( true );
Expand Down

0 comments on commit d5a82f0

Please sign in to comment.