papi_get_hardware_info(3) - Linux man page

Name

PAPI_get_hardware_info - get information about the system hardware

Synopsis

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,
 C_INT  totalcpus,  C_INT  vendor,nnodes,
           C_STRING  vendor_string,   C_INT  model,
           C_STRING  model_string,C_INT  model,
           C_FLOAT  revision,  C_FLOAT  mhz)

Description

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.

Note

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

Arguments

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

Return Values

On success, the C function returns a non-NULL pointer, and the Fortran function returns PAPI_OK. On error, NULL is returned by the C function,
and a non-zero error code is returned by the Fortran function.

Errors

PAPI_EINVAL
One or more of the arguments is invalid.

Example

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

Data Structure

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_level_t level[PAPI_MAX_MEM_HIERARCHY_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;

Bugs

If called before PAPI_library_init() the behavior of the routine is undefined.

See Also

papi_library_init(3), papi_get_dmem_info(3), papi_get_opt(3), papi_get_executable_info(3)

Referenced By

papi_get_component_info(3), papi_get_shared_lib_info(3), papi_get_substrate_info(3)