/*
* This file perfoms the following test: dynamic memory info
* The pages used should increase steadily.
*
* Author: Kevin London
* london@cs.utk.edu
*/
#include <stdio.h>
#include <stdlib.h>
#include "papi.h"
#include "papi_test.h"
#include "do_loops.h"
#define ALLOCMEM 200000
static void
dump_memory_info( FILE * output, PAPI_dmem_info_t * d )
{
fprintf( output, "\n--------\n" );
fprintf( output, "Mem Size:\t\t%lld\n", d->size );
fprintf( output, "Mem Peak Size:\t\t%lld\n", d->peak );
fprintf( output, "Mem Resident:\t\t%lld\n", d->resident );
fprintf( output, "Mem High Water Mark:\t%lld\n", d->high_water_mark );
fprintf( output, "Mem Shared:\t\t%lld\n", d->shared );
fprintf( output, "Mem Text:\t\t%lld\n", d->text );
fprintf( output, "Mem Library:\t\t%lld\n", d->library );
fprintf( output, "Mem Heap:\t\t%lld\n", d->heap );
fprintf( output, "Mem Locked:\t\t%lld\n", d->locked );
fprintf( output, "Mem Stack:\t\t%lld\n", d->stack );
fprintf( output, "Mem Pagesize:\t\t%lld\n", d->pagesize );
fprintf( output, "Mem Page Table Entries:\t\t%lld\n", d->pte );
fprintf( output, "--------\n\n" );
}
int
main( int argc, char **argv )
{
PAPI_dmem_info_t dmem;
long long value[7];
int retval, i = 0, j = 0;
double *m[7];
tests_quiet( argc, argv ); /* Set TESTS_QUIET variable */
retval = PAPI_library_init( PAPI_VER_CURRENT );
if ( retval != PAPI_VER_CURRENT )
test_fail( __FILE__, __LINE__, "PAPI_library_init", retval );
for ( i = 0; i < 7; i++ ) {
retval = PAPI_get_dmem_info( &dmem );
if ( retval != PAPI_OK )
test_fail( __FILE__, __LINE__, "PAPI_get_dmem_info", retval );
/* dump_memory_info(stdout,&dmem); */
value[i] = dmem.size;
m[i] = ( double * ) malloc( ALLOCMEM * sizeof ( double ) );
touch_dummy( m[j], ALLOCMEM );
}
if ( !TESTS_QUIET ) {
printf( "Test case: Dynamic Memory Information.\n" );
dump_memory_info( stdout, &dmem );
printf
( "------------------------------------------------------------------------\n" );
for ( i = 0; i < 7; i++ )
printf( "Malloc additional: %d KB Memory Size in KB: %d\n",
( int ) ( ( sizeof ( double ) * ALLOCMEM ) / 1024 ),
( int ) value[i] );
printf
( "------------------------------------------------------------------------\n" );
}
if ( value[6] >= value[5] && value[5] >= value[4] && value[4] >= value[3]
&& value[3] >= value[2] && value[2] >= value[1] &&
value[1] >= value[0] )
test_pass( __FILE__ );
else
test_fail( __FILE__, __LINE__, "Calculating Resident Memory",
( int ) value[6] );
return 1;
}