Hardware Locality (hwloc)  v2.2-20200408.0300.gitad4a86f
hwloc.h
00001 /*
00002  * Copyright © 2009 CNRS
00003  * Copyright © 2009-2020 Inria.  All rights reserved.
00004  * Copyright © 2009-2012 Université Bordeaux
00005  * Copyright © 2009-2020 Cisco Systems, Inc.  All rights reserved.
00006  * See COPYING in top-level directory.
00007  */
00008 
00009 /*=====================================================================
00010  *                 PLEASE GO READ THE DOCUMENTATION!
00011  *         ------------------------------------------------
00012  *               $tarball_directory/doc/doxygen-doc/
00013  *                                or
00014  *           https://www.open-mpi.org/projects/hwloc/doc/
00015  *=====================================================================
00016  *
00017  * FAIR WARNING: Do NOT expect to be able to figure out all the
00018  * subtleties of hwloc by simply reading function prototypes and
00019  * constant descrptions here in this file.
00020  *
00021  * Hwloc has wonderful documentation in both PDF and HTML formats for
00022  * your reading pleasure.  The formal documentation explains a LOT of
00023  * hwloc-specific concepts, provides definitions, and discusses the
00024  * "big picture" for many of the things that you'll find here in this
00025  * header file.
00026  *
00027  * The PDF/HTML documentation was generated via Doxygen; much of what
00028  * you'll see in there is also here in this file.  BUT THERE IS A LOT
00029  * THAT IS IN THE PDF/HTML THAT IS ***NOT*** IN hwloc.h!
00030  *
00031  * There are entire paragraph-length descriptions, discussions, and
00032  * pretty prictures to explain subtle corner cases, provide concrete
00033  * examples, etc.
00034  *
00035  * Please, go read the documentation.  :-)
00036  *
00037  * Moreover there are several examples of hwloc use under doc/examples
00038  * in the source tree.
00039  *
00040  *=====================================================================*/
00041 
00053 #ifndef HWLOC_H
00054 #define HWLOC_H
00055 
00056 #include "hwloc/autogen/config.h"
00057 
00058 #include <sys/types.h>
00059 #include <stdio.h>
00060 #include <string.h>
00061 #include <limits.h>
00062 
00063 /*
00064  * Symbol transforms
00065  */
00066 #include "hwloc/rename.h"
00067 
00068 /*
00069  * Bitmap definitions
00070  */
00071 
00072 #include "hwloc/bitmap.h"
00073 
00074 
00075 #ifdef __cplusplus
00076 extern "C" {
00077 #endif
00078 
00079 
00096 #define HWLOC_API_VERSION 0x00020100
00097 
00102 HWLOC_DECLSPEC unsigned hwloc_get_api_version(void);
00103 
00105 #define HWLOC_COMPONENT_ABI 6
00106 
00140 typedef hwloc_bitmap_t hwloc_cpuset_t;
00142 typedef hwloc_const_bitmap_t hwloc_const_cpuset_t;
00143 
00157 typedef hwloc_bitmap_t hwloc_nodeset_t;
00160 typedef hwloc_const_bitmap_t hwloc_const_nodeset_t;
00161 
00176 typedef enum {
00177 
00179 #define HWLOC_OBJ_TYPE_MIN HWLOC_OBJ_MACHINE /* Sentinel value */
00180 
00182   HWLOC_OBJ_MACHINE,    
00191   HWLOC_OBJ_PACKAGE,    
00197   HWLOC_OBJ_CORE,       
00201   HWLOC_OBJ_PU,         
00213   HWLOC_OBJ_L1CACHE,    
00214   HWLOC_OBJ_L2CACHE,    
00215   HWLOC_OBJ_L3CACHE,    
00216   HWLOC_OBJ_L4CACHE,    
00217   HWLOC_OBJ_L5CACHE,    
00219   HWLOC_OBJ_L1ICACHE,   
00220   HWLOC_OBJ_L2ICACHE,   
00221   HWLOC_OBJ_L3ICACHE,   
00223   HWLOC_OBJ_GROUP,      
00236   HWLOC_OBJ_NUMANODE,   
00257   HWLOC_OBJ_BRIDGE,     
00266   HWLOC_OBJ_PCI_DEVICE, 
00273   HWLOC_OBJ_OS_DEVICE,  
00281   HWLOC_OBJ_MISC,       
00292   HWLOC_OBJ_MEMCACHE,   
00305   HWLOC_OBJ_DIE,        
00310   HWLOC_OBJ_TYPE_MAX    
00311 } hwloc_obj_type_t;
00312 
00314 typedef enum hwloc_obj_cache_type_e {
00315   HWLOC_OBJ_CACHE_UNIFIED,      
00316   HWLOC_OBJ_CACHE_DATA,         
00317   HWLOC_OBJ_CACHE_INSTRUCTION   
00318 } hwloc_obj_cache_type_t;
00319 
00321 typedef enum hwloc_obj_bridge_type_e {
00322   HWLOC_OBJ_BRIDGE_HOST,        
00323   HWLOC_OBJ_BRIDGE_PCI          
00324 } hwloc_obj_bridge_type_t;
00325 
00327 typedef enum hwloc_obj_osdev_type_e {
00328   HWLOC_OBJ_OSDEV_BLOCK,        
00330   HWLOC_OBJ_OSDEV_GPU,          
00333   HWLOC_OBJ_OSDEV_NETWORK,      
00335   HWLOC_OBJ_OSDEV_OPENFABRICS,  
00338   HWLOC_OBJ_OSDEV_DMA,          
00340   HWLOC_OBJ_OSDEV_COPROC        
00344 } hwloc_obj_osdev_type_t;
00345 
00365 HWLOC_DECLSPEC int hwloc_compare_types (hwloc_obj_type_t type1, hwloc_obj_type_t type2) __hwloc_attribute_const;
00366 
00368 #define HWLOC_TYPE_UNORDERED INT_MAX
00369 
00378 union hwloc_obj_attr_u;
00379 
00384 struct hwloc_obj {
00385   /* physical information */
00386   hwloc_obj_type_t type;                
00387   char *subtype;                        
00389   unsigned os_index;                    
00394 #define HWLOC_UNKNOWN_INDEX (unsigned)-1
00395 
00396   char *name;                           
00401   hwloc_uint64_t total_memory; 
00403   union hwloc_obj_attr_u *attr;         
00406   /* global position */
00407   int depth;                            
00422   unsigned logical_index;               
00429   /* cousins are all objects of the same type (and depth) across the entire topology */
00430   struct hwloc_obj *next_cousin;        
00431   struct hwloc_obj *prev_cousin;        
00433   /* children of the same parent are siblings, even if they may have different type and depth */
00434   struct hwloc_obj *parent;             
00435   unsigned sibling_rank;                
00436   struct hwloc_obj *next_sibling;       
00437   struct hwloc_obj *prev_sibling;       
00440   unsigned arity;                       
00444   struct hwloc_obj **children;          
00445   struct hwloc_obj *first_child;        
00446   struct hwloc_obj *last_child;         
00449   int symmetric_subtree;                
00460   unsigned memory_arity;                
00463   struct hwloc_obj *memory_first_child; 
00478   unsigned io_arity;                    
00481   struct hwloc_obj *io_first_child;     
00490   unsigned misc_arity;                  
00493   struct hwloc_obj *misc_first_child;   
00499   /* cpusets and nodesets */
00500   hwloc_cpuset_t cpuset;                
00515   hwloc_cpuset_t complete_cpuset;       
00528   hwloc_nodeset_t nodeset;              
00548   hwloc_nodeset_t complete_nodeset;     
00564   struct hwloc_info_s *infos;           
00565   unsigned infos_count;                 
00567   /* misc */
00568   void *userdata;                       
00573   hwloc_uint64_t gp_index;                      
00578 };
00582 typedef struct hwloc_obj * hwloc_obj_t;
00583 
00585 union hwloc_obj_attr_u {
00587   struct hwloc_numanode_attr_s {
00588     hwloc_uint64_t local_memory; 
00589     unsigned page_types_len; 
00595     struct hwloc_memory_page_type_s {
00596       hwloc_uint64_t size;      
00597       hwloc_uint64_t count;     
00598     } * page_types;
00599   } numanode;
00600 
00602   struct hwloc_cache_attr_s {
00603     hwloc_uint64_t size;                  
00604     unsigned depth;                       
00605     unsigned linesize;                    
00606     int associativity;                    
00608     hwloc_obj_cache_type_t type;          
00609   } cache;
00611   struct hwloc_group_attr_s {
00612     unsigned depth;                       
00614     unsigned kind;                        
00615     unsigned subkind;                     
00616     unsigned char dont_merge;             
00617   } group;
00619   struct hwloc_pcidev_attr_s {
00620 #ifndef HWLOC_HAVE_32BITS_PCI_DOMAIN
00621     unsigned short domain; /* Only 16bits PCI domains are supported by default */
00622 #else
00623     unsigned int domain; /* 32bits PCI domain support break the library ABI, hence it's disabled by default */
00624 #endif
00625     unsigned char bus, dev, func;
00626     unsigned short class_id;
00627     unsigned short vendor_id, device_id, subvendor_id, subdevice_id;
00628     unsigned char revision;
00629     float linkspeed; /* in GB/s */
00630   } pcidev;
00632   struct hwloc_bridge_attr_s {
00633     union {
00634       struct hwloc_pcidev_attr_s pci;
00635     } upstream;
00636     hwloc_obj_bridge_type_t upstream_type;
00637     union {
00638       struct {
00639 #ifndef HWLOC_HAVE_32BITS_PCI_DOMAIN
00640         unsigned short domain; /* Only 16bits PCI domains are supported by default */
00641 #else
00642         unsigned int domain; /* 32bits PCI domain support break the library ABI, hence it's disabled by default */
00643 #endif
00644         unsigned char secondary_bus, subordinate_bus;
00645       } pci;
00646     } downstream;
00647     hwloc_obj_bridge_type_t downstream_type;
00648     unsigned depth;
00649   } bridge;
00651   struct hwloc_osdev_attr_s {
00652     hwloc_obj_osdev_type_t type;
00653   } osdev;
00654 };
00655 
00660 struct hwloc_info_s {
00661   char *name;   
00662   char *value;  
00663 };
00664 
00673 struct hwloc_topology;
00678 typedef struct hwloc_topology * hwloc_topology_t;
00679 
00686 HWLOC_DECLSPEC int hwloc_topology_init (hwloc_topology_t *topologyp);
00687 
00708 HWLOC_DECLSPEC int hwloc_topology_load(hwloc_topology_t topology);
00709 
00714 HWLOC_DECLSPEC void hwloc_topology_destroy (hwloc_topology_t topology);
00715 
00726 HWLOC_DECLSPEC int hwloc_topology_dup(hwloc_topology_t *newtopology, hwloc_topology_t oldtopology);
00727 
00745 HWLOC_DECLSPEC int hwloc_topology_abi_check(hwloc_topology_t topology);
00746 
00758 HWLOC_DECLSPEC void hwloc_topology_check(hwloc_topology_t topology);
00759 
00780 HWLOC_DECLSPEC int hwloc_topology_get_depth(hwloc_topology_t __hwloc_restrict topology) __hwloc_attribute_pure;
00781 
00805 HWLOC_DECLSPEC int hwloc_get_type_depth (hwloc_topology_t topology, hwloc_obj_type_t type);
00806 
00807 enum hwloc_get_type_depth_e {
00808     HWLOC_TYPE_DEPTH_UNKNOWN = -1,    
00809     HWLOC_TYPE_DEPTH_MULTIPLE = -2,   
00810     HWLOC_TYPE_DEPTH_NUMANODE = -3,   
00811     HWLOC_TYPE_DEPTH_BRIDGE = -4,     
00812     HWLOC_TYPE_DEPTH_PCI_DEVICE = -5, 
00813     HWLOC_TYPE_DEPTH_OS_DEVICE = -6,  
00814     HWLOC_TYPE_DEPTH_MISC = -7,       
00815     HWLOC_TYPE_DEPTH_MEMCACHE = -8    
00816 };
00817 
00837 HWLOC_DECLSPEC int hwloc_get_memory_parents_depth (hwloc_topology_t topology);
00838 
00852 static __hwloc_inline int
00853 hwloc_get_type_or_below_depth (hwloc_topology_t topology, hwloc_obj_type_t type) __hwloc_attribute_pure;
00854 
00868 static __hwloc_inline int
00869 hwloc_get_type_or_above_depth (hwloc_topology_t topology, hwloc_obj_type_t type) __hwloc_attribute_pure;
00870 
00878 HWLOC_DECLSPEC hwloc_obj_type_t hwloc_get_depth_type (hwloc_topology_t topology, int depth) __hwloc_attribute_pure;
00879 
00882 HWLOC_DECLSPEC unsigned hwloc_get_nbobjs_by_depth (hwloc_topology_t topology, int depth) __hwloc_attribute_pure;
00883 
00889 static __hwloc_inline int
00890 hwloc_get_nbobjs_by_type (hwloc_topology_t topology, hwloc_obj_type_t type) __hwloc_attribute_pure;
00891 
00896 static __hwloc_inline hwloc_obj_t
00897 hwloc_get_root_obj (hwloc_topology_t topology) __hwloc_attribute_pure;
00898 
00900 HWLOC_DECLSPEC hwloc_obj_t hwloc_get_obj_by_depth (hwloc_topology_t topology, int depth, unsigned idx) __hwloc_attribute_pure;
00901 
00908 static __hwloc_inline hwloc_obj_t
00909 hwloc_get_obj_by_type (hwloc_topology_t topology, hwloc_obj_type_t type, unsigned idx) __hwloc_attribute_pure;
00910 
00915 static __hwloc_inline hwloc_obj_t
00916 hwloc_get_next_obj_by_depth (hwloc_topology_t topology, int depth, hwloc_obj_t prev);
00917 
00924 static __hwloc_inline hwloc_obj_t
00925 hwloc_get_next_obj_by_type (hwloc_topology_t topology, hwloc_obj_type_t type,
00926                             hwloc_obj_t prev);
00927 
00944 HWLOC_DECLSPEC const char * hwloc_obj_type_string (hwloc_obj_type_t type) __hwloc_attribute_const;
00945 
00963 HWLOC_DECLSPEC int hwloc_obj_type_snprintf(char * __hwloc_restrict string, size_t size,
00964                                            hwloc_obj_t obj,
00965                                            int verbose);
00966 
00978 HWLOC_DECLSPEC int hwloc_obj_attr_snprintf(char * __hwloc_restrict string, size_t size,
00979                                            hwloc_obj_t obj, const char * __hwloc_restrict separator,
00980                                            int verbose);
00981 
01005 HWLOC_DECLSPEC int hwloc_type_sscanf(const char *string,
01006                                      hwloc_obj_type_t *typep,
01007                                      union hwloc_obj_attr_u *attrp, size_t attrsize);
01008 
01030 HWLOC_DECLSPEC int hwloc_type_sscanf_as_depth(const char *string,
01031                                               hwloc_obj_type_t *typep,
01032                                               hwloc_topology_t topology, int *depthp);
01033 
01049 static __hwloc_inline const char *
01050 hwloc_obj_get_info_by_name(hwloc_obj_t obj, const char *name) __hwloc_attribute_pure;
01051 
01068 HWLOC_DECLSPEC int hwloc_obj_add_info(hwloc_obj_t obj, const char *name, const char *value);
01069 
01141 typedef enum {
01144   HWLOC_CPUBIND_PROCESS = (1<<0),
01145 
01148   HWLOC_CPUBIND_THREAD = (1<<1),
01149 
01173   HWLOC_CPUBIND_STRICT = (1<<2),
01174 
01190   HWLOC_CPUBIND_NOMEMBIND = (1<<3)
01191 } hwloc_cpubind_flags_t;
01192 
01198 HWLOC_DECLSPEC int hwloc_set_cpubind(hwloc_topology_t topology, hwloc_const_cpuset_t set, int flags);
01199 
01205 HWLOC_DECLSPEC int hwloc_get_cpubind(hwloc_topology_t topology, hwloc_cpuset_t set, int flags);
01206 
01218 HWLOC_DECLSPEC int hwloc_set_proc_cpubind(hwloc_topology_t topology, hwloc_pid_t pid, hwloc_const_cpuset_t set, int flags);
01219 
01231 HWLOC_DECLSPEC int hwloc_get_proc_cpubind(hwloc_topology_t topology, hwloc_pid_t pid, hwloc_cpuset_t set, int flags);
01232 
01233 #ifdef hwloc_thread_t
01234 
01241 HWLOC_DECLSPEC int hwloc_set_thread_cpubind(hwloc_topology_t topology, hwloc_thread_t thread, hwloc_const_cpuset_t set, int flags);
01242 #endif
01243 
01244 #ifdef hwloc_thread_t
01245 
01252 HWLOC_DECLSPEC int hwloc_get_thread_cpubind(hwloc_topology_t topology, hwloc_thread_t thread, hwloc_cpuset_t set, int flags);
01253 #endif
01254 
01268 HWLOC_DECLSPEC int hwloc_get_last_cpu_location(hwloc_topology_t topology, hwloc_cpuset_t set, int flags);
01269 
01286 HWLOC_DECLSPEC int hwloc_get_proc_last_cpu_location(hwloc_topology_t topology, hwloc_pid_t pid, hwloc_cpuset_t set, int flags);
01287 
01367 typedef enum {
01375   HWLOC_MEMBIND_DEFAULT =       0,
01376 
01386   HWLOC_MEMBIND_FIRSTTOUCH =    1,
01387 
01390   HWLOC_MEMBIND_BIND =          2,
01391 
01399   HWLOC_MEMBIND_INTERLEAVE =    3,
01400 
01406   HWLOC_MEMBIND_NEXTTOUCH =     4,
01407 
01414   HWLOC_MEMBIND_MIXED = -1
01415 } hwloc_membind_policy_t;
01416 
01430 typedef enum {
01435   HWLOC_MEMBIND_PROCESS =       (1<<0),
01436 
01440   HWLOC_MEMBIND_THREAD =        (1<<1),
01441 
01448   HWLOC_MEMBIND_STRICT =        (1<<2),
01449 
01454   HWLOC_MEMBIND_MIGRATE =       (1<<3),
01455 
01467   HWLOC_MEMBIND_NOCPUBIND =     (1<<4),
01468 
01478   HWLOC_MEMBIND_BYNODESET =     (1<<5)
01479 } hwloc_membind_flags_t;
01480 
01496 HWLOC_DECLSPEC int hwloc_set_membind(hwloc_topology_t topology, hwloc_const_bitmap_t set, hwloc_membind_policy_t policy, int flags);
01497 
01542 HWLOC_DECLSPEC int hwloc_get_membind(hwloc_topology_t topology, hwloc_bitmap_t set, hwloc_membind_policy_t * policy, int flags);
01543 
01556 HWLOC_DECLSPEC int hwloc_set_proc_membind(hwloc_topology_t topology, hwloc_pid_t pid, hwloc_const_bitmap_t set, hwloc_membind_policy_t policy, int flags);
01557 
01597 HWLOC_DECLSPEC int hwloc_get_proc_membind(hwloc_topology_t topology, hwloc_pid_t pid, hwloc_bitmap_t set, hwloc_membind_policy_t * policy, int flags);
01598 
01609 HWLOC_DECLSPEC int hwloc_set_area_membind(hwloc_topology_t topology, const void *addr, size_t len, hwloc_const_bitmap_t set, hwloc_membind_policy_t policy, int flags);
01610 
01638 HWLOC_DECLSPEC int hwloc_get_area_membind(hwloc_topology_t topology, const void *addr, size_t len, hwloc_bitmap_t set, hwloc_membind_policy_t * policy, int flags);
01639 
01659 HWLOC_DECLSPEC int hwloc_get_area_memlocation(hwloc_topology_t topology, const void *addr, size_t len, hwloc_bitmap_t set, int flags);
01660 
01668 HWLOC_DECLSPEC void *hwloc_alloc(hwloc_topology_t topology, size_t len);
01669 
01684 HWLOC_DECLSPEC void *hwloc_alloc_membind(hwloc_topology_t topology, size_t len, hwloc_const_bitmap_t set, hwloc_membind_policy_t policy, int flags) __hwloc_attribute_malloc;
01685 
01695 static __hwloc_inline void *
01696 hwloc_alloc_membind_policy(hwloc_topology_t topology, size_t len, hwloc_const_bitmap_t set, hwloc_membind_policy_t policy, int flags) __hwloc_attribute_malloc;
01697 
01701 HWLOC_DECLSPEC int hwloc_free(hwloc_topology_t topology, void *addr, size_t len);
01702 
01739 HWLOC_DECLSPEC int hwloc_topology_set_pid(hwloc_topology_t __hwloc_restrict topology, hwloc_pid_t pid);
01740 
01769 HWLOC_DECLSPEC int hwloc_topology_set_synthetic(hwloc_topology_t __hwloc_restrict topology, const char * __hwloc_restrict description);
01770 
01797 HWLOC_DECLSPEC int hwloc_topology_set_xml(hwloc_topology_t __hwloc_restrict topology, const char * __hwloc_restrict xmlpath);
01798 
01825 HWLOC_DECLSPEC int hwloc_topology_set_xmlbuffer(hwloc_topology_t __hwloc_restrict topology, const char * __hwloc_restrict buffer, int size);
01826 
01829 enum hwloc_topology_components_flag_e {
01833   HWLOC_TOPOLOGY_COMPONENTS_FLAG_BLACKLIST = (1UL<<0)
01834 };
01835 
01850 HWLOC_DECLSPEC int hwloc_topology_set_components(hwloc_topology_t __hwloc_restrict topology, unsigned long flags, const char * __hwloc_restrict name);
01851 
01870 enum hwloc_topology_flags_e {
01891   HWLOC_TOPOLOGY_FLAG_INCLUDE_DISALLOWED = (1UL<<0),
01892 
01911   HWLOC_TOPOLOGY_FLAG_IS_THISSYSTEM = (1UL<<1),
01912 
01932   HWLOC_TOPOLOGY_FLAG_THISSYSTEM_ALLOWED_RESOURCES = (1UL<<2)
01933 };
01934 
01944 HWLOC_DECLSPEC int hwloc_topology_set_flags (hwloc_topology_t topology, unsigned long flags);
01945 
01952 HWLOC_DECLSPEC unsigned long hwloc_topology_get_flags (hwloc_topology_t topology);
01953 
01961 HWLOC_DECLSPEC int hwloc_topology_is_thissystem(hwloc_topology_t  __hwloc_restrict topology) __hwloc_attribute_pure;
01962 
01964 struct hwloc_topology_discovery_support {
01966   unsigned char pu;
01968   unsigned char numa;
01970   unsigned char numa_memory;
01972   unsigned char disallowed_pu;
01974   unsigned char disallowed_numa;
01975 };
01976 
01982 struct hwloc_topology_cpubind_support {
01984   unsigned char set_thisproc_cpubind;
01986   unsigned char get_thisproc_cpubind;
01988   unsigned char set_proc_cpubind;
01990   unsigned char get_proc_cpubind;
01992   unsigned char set_thisthread_cpubind;
01994   unsigned char get_thisthread_cpubind;
01996   unsigned char set_thread_cpubind;
01998   unsigned char get_thread_cpubind;
02000   unsigned char get_thisproc_last_cpu_location;
02002   unsigned char get_proc_last_cpu_location;
02004   unsigned char get_thisthread_last_cpu_location;
02005 };
02006 
02012 struct hwloc_topology_membind_support {
02014   unsigned char set_thisproc_membind;
02016   unsigned char get_thisproc_membind;
02018   unsigned char set_proc_membind;
02020   unsigned char get_proc_membind;
02022   unsigned char set_thisthread_membind;
02024   unsigned char get_thisthread_membind;
02026   unsigned char set_area_membind;
02028   unsigned char get_area_membind;
02030   unsigned char alloc_membind;
02032   unsigned char firsttouch_membind;
02034   unsigned char bind_membind;
02036   unsigned char interleave_membind;
02038   unsigned char nexttouch_membind;
02040   unsigned char migrate_membind;
02042   unsigned char get_area_memlocation;
02043 };
02044 
02051 struct hwloc_topology_support {
02052   struct hwloc_topology_discovery_support *discovery;
02053   struct hwloc_topology_cpubind_support *cpubind;
02054   struct hwloc_topology_membind_support *membind;
02055 };
02056 
02066 HWLOC_DECLSPEC const struct hwloc_topology_support *hwloc_topology_get_support(hwloc_topology_t __hwloc_restrict topology);
02067 
02077 enum hwloc_type_filter_e {
02083   HWLOC_TYPE_FILTER_KEEP_ALL = 0,
02084 
02091   HWLOC_TYPE_FILTER_KEEP_NONE = 1,
02092 
02105   HWLOC_TYPE_FILTER_KEEP_STRUCTURE = 2,
02106 
02120   HWLOC_TYPE_FILTER_KEEP_IMPORTANT = 3
02121 };
02122 
02125 HWLOC_DECLSPEC int hwloc_topology_set_type_filter(hwloc_topology_t topology, hwloc_obj_type_t type, enum hwloc_type_filter_e filter);
02126 
02129 HWLOC_DECLSPEC int hwloc_topology_get_type_filter(hwloc_topology_t topology, hwloc_obj_type_t type, enum hwloc_type_filter_e *filter);
02130 
02135 HWLOC_DECLSPEC int hwloc_topology_set_all_types_filter(hwloc_topology_t topology, enum hwloc_type_filter_e filter);
02136 
02141 HWLOC_DECLSPEC int hwloc_topology_set_cache_types_filter(hwloc_topology_t topology, enum hwloc_type_filter_e filter);
02142 
02147 HWLOC_DECLSPEC int hwloc_topology_set_icache_types_filter(hwloc_topology_t topology, enum hwloc_type_filter_e filter);
02148 
02151 HWLOC_DECLSPEC int hwloc_topology_set_io_types_filter(hwloc_topology_t topology, enum hwloc_type_filter_e filter);
02152 
02163 HWLOC_DECLSPEC void hwloc_topology_set_userdata(hwloc_topology_t topology, const void *userdata);
02164 
02170 HWLOC_DECLSPEC void * hwloc_topology_get_userdata(hwloc_topology_t topology);
02171 
02181 enum hwloc_restrict_flags_e {
02187   HWLOC_RESTRICT_FLAG_REMOVE_CPULESS = (1UL<<0),
02188 
02193   HWLOC_RESTRICT_FLAG_BYNODESET =  (1UL<<3),
02194 
02200   HWLOC_RESTRICT_FLAG_REMOVE_MEMLESS = (1UL<<4),
02201 
02206   HWLOC_RESTRICT_FLAG_ADAPT_MISC = (1UL<<1),
02207 
02212   HWLOC_RESTRICT_FLAG_ADAPT_IO = (1UL<<2)
02213 };
02214 
02239 HWLOC_DECLSPEC int hwloc_topology_restrict(hwloc_topology_t __hwloc_restrict topology, hwloc_const_bitmap_t set, unsigned long flags);
02240 
02242 enum hwloc_allow_flags_e {
02247   HWLOC_ALLOW_FLAG_ALL = (1UL<<0),
02248 
02256   HWLOC_ALLOW_FLAG_LOCAL_RESTRICTIONS = (1UL<<1),
02257 
02260   HWLOC_ALLOW_FLAG_CUSTOM = (1UL<<2)
02261 };
02262 
02278 HWLOC_DECLSPEC int hwloc_topology_allow(hwloc_topology_t __hwloc_restrict topology, hwloc_const_cpuset_t cpuset, hwloc_const_nodeset_t nodeset, unsigned long flags);
02279 
02301 HWLOC_DECLSPEC hwloc_obj_t hwloc_topology_insert_misc_object(hwloc_topology_t topology, hwloc_obj_t parent, const char *name);
02302 
02323 HWLOC_DECLSPEC hwloc_obj_t hwloc_topology_alloc_group_object(hwloc_topology_t topology);
02324 
02361 HWLOC_DECLSPEC hwloc_obj_t hwloc_topology_insert_group_object(hwloc_topology_t topology, hwloc_obj_t group);
02362 
02372 HWLOC_DECLSPEC int hwloc_obj_add_other_obj_sets(hwloc_obj_t dst, hwloc_obj_t src);
02373 
02378 #ifdef __cplusplus
02379 } /* extern "C" */
02380 #endif
02381 
02382 
02383 /* high-level helpers */
02384 #include "hwloc/helper.h"
02385 
02386 /* inline code of some functions above */
02387 #include "hwloc/inlines.h"
02388 
02389 /* exporting to XML or synthetic */
02390 #include "hwloc/export.h"
02391 
02392 /* distances */
02393 #include "hwloc/distances.h"
02394 
02395 /* topology diffs */
02396 #include "hwloc/diff.h"
02397 
02398 /* deprecated headers */
02399 #include "hwloc/deprecated.h"
02400 
02401 #endif /* HWLOC_H */