|
Packit |
577717 |
/*
|
|
Packit |
577717 |
* This file perfoms the following test: memory info
|
|
Packit |
577717 |
*
|
|
Packit |
577717 |
* Author: Kevin London
|
|
Packit |
577717 |
* london@cs.utk.edu
|
|
Packit |
577717 |
*/
|
|
Packit |
577717 |
/** file papi_mem_info.c
|
|
Packit |
577717 |
* @brief papi_mem_info utility.
|
|
Packit |
577717 |
* @page papi_mem_info
|
|
Packit |
577717 |
* @section NAME
|
|
Packit |
577717 |
* papi_mem_info - provides information on the memory architecture of the current processor.
|
|
Packit |
577717 |
*
|
|
Packit |
577717 |
* @section Synopsis
|
|
Packit |
577717 |
*
|
|
Packit |
577717 |
* @section Description
|
|
Packit |
577717 |
* papi_mem_info is a PAPI utility program that reports information about
|
|
Packit |
577717 |
* the cache memory architecture of the current processor, including number,
|
|
Packit |
577717 |
* types, sizes and associativities of instruction and data caches and
|
|
Packit |
577717 |
* Translation Lookaside Buffers.
|
|
Packit |
577717 |
*
|
|
Packit |
577717 |
* @section Options
|
|
Packit |
577717 |
* This utility has no command line options.
|
|
Packit |
577717 |
*
|
|
Packit |
577717 |
* @section Bugs
|
|
Packit |
577717 |
* There are no known bugs in this utility.
|
|
Packit |
577717 |
* If you find a bug, it should be reported to the
|
|
Packit |
577717 |
* PAPI Mailing List at <ptools-perfapi@icl.utk.edu>.
|
|
Packit |
577717 |
*/
|
|
Packit |
577717 |
|
|
Packit |
577717 |
#include <stdio.h>
|
|
Packit |
577717 |
#include <stdlib.h>
|
|
Packit |
577717 |
|
|
Packit |
577717 |
#include "papi.h"
|
|
Packit |
577717 |
|
|
Packit |
577717 |
|
|
Packit |
577717 |
int
|
|
Packit |
577717 |
main( int argc, char **argv )
|
|
Packit |
577717 |
{
|
|
Packit |
577717 |
const PAPI_hw_info_t *meminfo = NULL;
|
|
Packit |
577717 |
PAPI_mh_level_t *L;
|
|
Packit |
577717 |
int i, j, retval;
|
|
Packit |
577717 |
|
|
Packit |
577717 |
(void)argc;
|
|
Packit |
577717 |
(void)argv;
|
|
Packit |
577717 |
|
|
Packit |
577717 |
retval = PAPI_library_init( PAPI_VER_CURRENT );
|
|
Packit |
577717 |
if ( retval != PAPI_VER_CURRENT ) {
|
|
Packit |
577717 |
fprintf(stderr,"Error! PAPI_library_init\n");
|
|
Packit |
577717 |
return retval;
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
|
|
Packit |
577717 |
meminfo = PAPI_get_hardware_info( );
|
|
Packit |
577717 |
if (meminfo == NULL ) {
|
|
Packit |
577717 |
fprintf(stderr,"Error! PAPI_get_hardware_info");
|
|
Packit |
577717 |
return 2;
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
|
|
Packit |
577717 |
printf( "Memory Cache and TLB Hierarchy Information.\n" );
|
|
Packit |
577717 |
printf( "------------------------------------------------------------------------\n" );
|
|
Packit |
577717 |
|
|
Packit |
577717 |
/* Extract and report the tlb and cache information */
|
|
Packit |
577717 |
L = ( PAPI_mh_level_t * ) & ( meminfo->mem_hierarchy.level[0] );
|
|
Packit |
577717 |
printf( "TLB Information.\n There may be multiple descriptors for each level of TLB\n" );
|
|
Packit |
577717 |
printf( " if multiple page sizes are supported.\n\n" );
|
|
Packit |
577717 |
/* Scan the TLB structures */
|
|
Packit |
577717 |
for ( i = 0; i < meminfo->mem_hierarchy.levels; i++ ) {
|
|
Packit |
577717 |
for ( j = 0; j < PAPI_MH_MAX_LEVELS; j++ ) {
|
|
Packit |
577717 |
switch ( PAPI_MH_CACHE_TYPE( L[i].tlb[j].type ) ) {
|
|
Packit |
577717 |
case PAPI_MH_TYPE_UNIFIED:
|
|
Packit |
577717 |
printf( "L%d Unified TLB:\n", i + 1 );
|
|
Packit |
577717 |
break;
|
|
Packit |
577717 |
case PAPI_MH_TYPE_DATA:
|
|
Packit |
577717 |
printf( "L%d Data TLB:\n", i + 1 );
|
|
Packit |
577717 |
break;
|
|
Packit |
577717 |
case PAPI_MH_TYPE_INST:
|
|
Packit |
577717 |
printf( "L%d Instruction TLB:\n", i + 1 );
|
|
Packit |
577717 |
break;
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
if ( L[i].tlb[j].type ) {
|
|
Packit |
577717 |
if ( L[i].tlb[j].page_size )
|
|
Packit |
577717 |
printf( " Page Size: %6d KB\n",
|
|
Packit |
577717 |
L[i].tlb[j].page_size >> 10 );
|
|
Packit |
577717 |
printf( " Number of Entries: %6d\n",
|
|
Packit |
577717 |
L[i].tlb[j].num_entries );
|
|
Packit |
577717 |
switch ( L[i].tlb[j].associativity ) {
|
|
Packit |
577717 |
case 0: /* undefined */
|
|
Packit |
577717 |
break;
|
|
Packit |
577717 |
case 1:
|
|
Packit |
577717 |
printf( " Associativity: Direct Mapped\n\n" );
|
|
Packit |
577717 |
break;
|
|
Packit |
577717 |
case SHRT_MAX:
|
|
Packit |
577717 |
printf( " Associativity: Full\n\n" );
|
|
Packit |
577717 |
break;
|
|
Packit |
577717 |
default:
|
|
Packit |
577717 |
printf( " Associativity: %6d\n\n",
|
|
Packit |
577717 |
L[i].tlb[j].associativity );
|
|
Packit |
577717 |
break;
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
|
|
Packit |
577717 |
/* Scan the Cache structures */
|
|
Packit |
577717 |
printf( "\nCache Information.\n\n" );
|
|
Packit |
577717 |
for ( i = 0; i < meminfo->mem_hierarchy.levels; i++ ) {
|
|
Packit |
577717 |
for ( j = 0; j < 2; j++ ) {
|
|
Packit |
577717 |
switch ( PAPI_MH_CACHE_TYPE( L[i].cache[j].type ) ) {
|
|
Packit |
577717 |
case PAPI_MH_TYPE_UNIFIED:
|
|
Packit |
577717 |
printf( "L%d Unified Cache:\n", i + 1 );
|
|
Packit |
577717 |
break;
|
|
Packit |
577717 |
case PAPI_MH_TYPE_DATA:
|
|
Packit |
577717 |
printf( "L%d Data Cache:\n", i + 1 );
|
|
Packit |
577717 |
break;
|
|
Packit |
577717 |
case PAPI_MH_TYPE_INST:
|
|
Packit |
577717 |
printf( "L%d Instruction Cache:\n", i + 1 );
|
|
Packit |
577717 |
break;
|
|
Packit |
577717 |
case PAPI_MH_TYPE_TRACE:
|
|
Packit |
577717 |
printf( "L%d Trace Buffer:\n", i + 1 );
|
|
Packit |
577717 |
break;
|
|
Packit |
577717 |
case PAPI_MH_TYPE_VECTOR:
|
|
Packit |
577717 |
printf( "L%d Vector Cache:\n", i + 1 );
|
|
Packit |
577717 |
break;
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
if ( L[i].cache[j].type ) {
|
|
Packit |
577717 |
printf( " Total size: %6d KB\n Line size: %6d B\n Number of Lines: %6d\n Associativity: %6d\n\n",
|
|
Packit |
577717 |
( L[i].cache[j].size ) >> 10, L[i].cache[j].line_size,
|
|
Packit |
577717 |
L[i].cache[j].num_lines,
|
|
Packit |
577717 |
L[i].cache[j].associativity );
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
|
|
Packit |
577717 |
return 0;
|
|
Packit |
577717 |
}
|