PAPIC:PAPI get hardware info.3
From PAPIDocs
Jump to: navigation, search


  • PAPI_get_hardware_info - get information about the system hardware


C Interface

#include <papi.h>
const PAPI_hw_info_t *PAPI_get_hardware_info(void);

Fortran Interface

#include fpapi.h
PAPIF_get_hardware_info(C_INT  ncpu,  C_INT  nnodes,
totalcpus,  C_INT  vendor,
vendor_string,   C_INT  model,
revision,  C_FLOAT  mhz)


In C, this function returns a pointer to a structure containing information about the hardware on which the program runs. In Fortran, the values of the structure are returned explicitly.


The following arguments are implicit in the structure returned by the C function, or explicitly returned by Fortran.

ncpu -- number of CPUs in an SMP Node

nnodes -- number of Nodes in the entire system

totalcpus -- total number of CPUs in the entire system

vendor -- vendor id number of CPU

vendor_string -- vendor id string of CPU

model -- model number of CPU

model_string -- model string of CPU

revision -- Revision number of CPU

mhz -- Cycle time of this CPU; *may* be an estimate generated at init time with a quick timing routine

mem_hierarchy -- PAPI memory heirarchy description


PAPI_EINVAL One or more of the arguments is invalid.


If called before the behavior of the routine is undefined.


The C structure contains detailed information about cache and TLB sizes. This information is not available from Fortran.


 const PAPI_hw_info_t *hwinfo = NULL;
if ((hwinfo = PAPI_get_hardware_info()) == NULL)
printf("%d CPU's at %f Mhz.\en",hwinfo->totalcpus,hwinfo->mhz);


The C data structure returned by this function is found in papi.h and reproduced below:

typedef struct _papi_mh_tlb_info {
int type; /* See papi.h for PAPI_MH definitions. */
int num_entries;
int associativity;
} PAPI_mh_tlb_info_t;
typedef struct _papi_mh_cache_info {
int type; /* See papi.h for PAPI_MH definitions. */
int size;
int line_size;
int num_lines;
int associativity;
} PAPI_mh_cache_info_t;
typedef struct _papi_mh_level_info {
PAPI_mh_tlb_info_t   tlb[2];
PAPI_mh_cache_info_t cache[2];
} PAPI_mh_level_t;
typedef struct _papi_mh_info { /* mh for mem hierarchy maybe? */
int levels;
} PAPI_mh_info_t;
typedef struct _papi_hw_info {
int ncpu;                     /* Number of CPU's in an SMP Node */
int nnodes;                   /* Number of Nodes in the entire system */
int totalcpus;                /* Total number of CPU's in the entire system */
int vendor;                   /* Vendor number of CPU */
char vendor_string[PAPI_MAX_STR_LEN];     /* Vendor string of CPU */
int model;                    /* Model number of CPU */
char model_string[PAPI_MAX_STR_LEN];      /* Model string of CPU */
float revision;               /* Revision of CPU */
float mhz;                    /* Cycle time of this CPU, *may* be estimated at
init time with a quick timing routine */
PAPI_mh_info_t mem_hierarchy;  /* PAPI memory heirarchy description */
} PAPI_hw_info_t;

See Also

PAPI_get_executable_info(3), PAPI_get_opt(3), PAPI_get_dmem_info(3), PAPI_library_init(3)