Hardware Locality (hwloc)  v2.0-20191027.0400.gite37e7d8
hwloc.h
00001 /*
00002  * Copyright © 2009 CNRS
00003  * Copyright © 2009-2019 Inria.  All rights reserved.
00004  * Copyright © 2009-2012 Université Bordeaux
00005  * Copyright © 2009-2011 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  *           http://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 #include <sys/types.h>
00058 #include <stdio.h>
00059 #include <string.h>
00060 #include <limits.h>
00061 
00062 /*
00063  * Symbol transforms
00064  */
00065 #include <hwloc/rename.h>
00066 
00067 /*
00068  * Bitmap definitions
00069  */
00070 
00071 #include <hwloc/bitmap.h>
00072 
00073 
00074 #ifdef __cplusplus
00075 extern "C" {
00076 #endif
00077 
00078 
00095 #define HWLOC_API_VERSION 0x00020000
00096 
00101 HWLOC_DECLSPEC unsigned hwloc_get_api_version(void);
00102 
00104 #define HWLOC_COMPONENT_ABI 5
00105 
00139 typedef hwloc_bitmap_t hwloc_cpuset_t;
00141 typedef hwloc_const_bitmap_t hwloc_const_cpuset_t;
00142 
00156 typedef hwloc_bitmap_t hwloc_nodeset_t;
00159 typedef hwloc_const_bitmap_t hwloc_const_nodeset_t;
00160 
00175 #define HWLOC_OBJ_TYPE_MIN HWLOC_OBJ_MACHINE 
00176 typedef enum {
00177   HWLOC_OBJ_MACHINE,    
00186   HWLOC_OBJ_PACKAGE,    
00191   HWLOC_OBJ_CORE,       
00195   HWLOC_OBJ_PU,         
00207   HWLOC_OBJ_L1CACHE,    
00208   HWLOC_OBJ_L2CACHE,    
00209   HWLOC_OBJ_L3CACHE,    
00210   HWLOC_OBJ_L4CACHE,    
00211   HWLOC_OBJ_L5CACHE,    
00213   HWLOC_OBJ_L1ICACHE,   
00214   HWLOC_OBJ_L2ICACHE,   
00215   HWLOC_OBJ_L3ICACHE,   
00217   HWLOC_OBJ_GROUP,      
00230   HWLOC_OBJ_NUMANODE,   
00247   HWLOC_OBJ_BRIDGE,     
00256   HWLOC_OBJ_PCI_DEVICE, 
00263   HWLOC_OBJ_OS_DEVICE,  
00271   HWLOC_OBJ_MISC,       
00282   HWLOC_OBJ_TYPE_MAX    
00283 } hwloc_obj_type_t;
00284 
00286 typedef enum hwloc_obj_cache_type_e {
00287   HWLOC_OBJ_CACHE_UNIFIED,      
00288   HWLOC_OBJ_CACHE_DATA,         
00289   HWLOC_OBJ_CACHE_INSTRUCTION   
00290 } hwloc_obj_cache_type_t;
00291 
00293 typedef enum hwloc_obj_bridge_type_e {
00294   HWLOC_OBJ_BRIDGE_HOST,        
00295   HWLOC_OBJ_BRIDGE_PCI          
00296 } hwloc_obj_bridge_type_t;
00297 
00299 typedef enum hwloc_obj_osdev_type_e {
00300   HWLOC_OBJ_OSDEV_BLOCK,        
00302   HWLOC_OBJ_OSDEV_GPU,          
00305   HWLOC_OBJ_OSDEV_NETWORK,      
00307   HWLOC_OBJ_OSDEV_OPENFABRICS,  
00310   HWLOC_OBJ_OSDEV_DMA,          
00312   HWLOC_OBJ_OSDEV_COPROC        
00316 } hwloc_obj_osdev_type_t;
00317 
00337 HWLOC_DECLSPEC int hwloc_compare_types (hwloc_obj_type_t type1, hwloc_obj_type_t type2) __hwloc_attribute_const;
00338 
00339 enum hwloc_compare_types_e {
00340     HWLOC_TYPE_UNORDERED = INT_MAX      
00341 };
00342 
00351 union hwloc_obj_attr_u;
00352 
00357 struct hwloc_obj {
00358   /* physical information */
00359   hwloc_obj_type_t type;                
00360   char *subtype;                        
00362   unsigned os_index;                    
00367 #define HWLOC_UNKNOWN_INDEX (unsigned)-1
00368 
00369   char *name;                           
00374   hwloc_uint64_t total_memory; 
00376   union hwloc_obj_attr_u *attr;         
00379   /* global position */
00380   int depth;                            
00395   unsigned logical_index;               
00402   /* cousins are all objects of the same type (and depth) across the entire topology */
00403   struct hwloc_obj *next_cousin;        
00404   struct hwloc_obj *prev_cousin;        
00406   /* children of the same parent are siblings, even if they may have different type and depth */
00407   struct hwloc_obj *parent;             
00408   unsigned sibling_rank;                
00409   struct hwloc_obj *next_sibling;       
00410   struct hwloc_obj *prev_sibling;       
00413   unsigned arity;                       
00417   struct hwloc_obj **children;          
00418   struct hwloc_obj *first_child;        
00419   struct hwloc_obj *last_child;         
00422   int symmetric_subtree;                
00433   unsigned memory_arity;                
00436   struct hwloc_obj *memory_first_child; 
00445   unsigned io_arity;                    
00448   struct hwloc_obj *io_first_child;     
00457   unsigned misc_arity;                  
00460   struct hwloc_obj *misc_first_child;   
00466   /* cpusets and nodesets */
00467   hwloc_cpuset_t cpuset;                
00482   hwloc_cpuset_t complete_cpuset;       
00495   hwloc_nodeset_t nodeset;              
00515   hwloc_nodeset_t complete_nodeset;     
00531   struct hwloc_info_s *infos;           
00532   unsigned infos_count;                 
00534   /* misc */
00535   void *userdata;                       
00540   hwloc_uint64_t gp_index;                      
00545 };
00549 typedef struct hwloc_obj * hwloc_obj_t;
00550 
00552 union hwloc_obj_attr_u {
00554   struct hwloc_numanode_attr_s {
00555     hwloc_uint64_t local_memory; 
00556     unsigned page_types_len; 
00562     struct hwloc_memory_page_type_s {
00563       hwloc_uint64_t size;      
00564       hwloc_uint64_t count;     
00565     } * page_types;
00566   } numanode;
00567 
00569   struct hwloc_cache_attr_s {
00570     hwloc_uint64_t size;                  
00571     unsigned depth;                       
00572     unsigned linesize;                    
00573     int associativity;                    
00575     hwloc_obj_cache_type_t type;          
00576   } cache;
00578   struct hwloc_group_attr_s {
00579     unsigned depth;                       
00581     unsigned kind;                        
00582     unsigned subkind;                     
00583     unsigned char dont_merge;             
00584   } group;
00586   struct hwloc_pcidev_attr_s {
00587     unsigned short domain;
00588     unsigned char bus, dev, func;
00589     unsigned short class_id;
00590     unsigned short vendor_id, device_id, subvendor_id, subdevice_id;
00591     unsigned char revision;
00592     float linkspeed; /* in GB/s */
00593   } pcidev;
00595   struct hwloc_bridge_attr_s {
00596     union {
00597       struct hwloc_pcidev_attr_s pci;
00598     } upstream;
00599     hwloc_obj_bridge_type_t upstream_type;
00600     union {
00601       struct {
00602         unsigned short domain;
00603         unsigned char secondary_bus, subordinate_bus;
00604       } pci;
00605     } downstream;
00606     hwloc_obj_bridge_type_t downstream_type;
00607     unsigned depth;
00608   } bridge;
00610   struct hwloc_osdev_attr_s {
00611     hwloc_obj_osdev_type_t type;
00612   } osdev;
00613 };
00614 
00619 struct hwloc_info_s {
00620   char *name;   
00621   char *value;  
00622 };
00623 
00632 struct hwloc_topology;
00637 typedef struct hwloc_topology * hwloc_topology_t;
00638 
00645 HWLOC_DECLSPEC int hwloc_topology_init (hwloc_topology_t *topologyp);
00646 
00667 HWLOC_DECLSPEC int hwloc_topology_load(hwloc_topology_t topology);
00668 
00673 HWLOC_DECLSPEC void hwloc_topology_destroy (hwloc_topology_t topology);
00674 
00685 HWLOC_DECLSPEC int hwloc_topology_dup(hwloc_topology_t *newtopology, hwloc_topology_t oldtopology);
00686 
00704 HWLOC_DECLSPEC int hwloc_topology_abi_check(hwloc_topology_t topology);
00705 
00717 HWLOC_DECLSPEC void hwloc_topology_check(hwloc_topology_t topology);
00718 
00739 HWLOC_DECLSPEC int hwloc_topology_get_depth(hwloc_topology_t __hwloc_restrict topology) __hwloc_attribute_pure;
00740 
00764 HWLOC_DECLSPEC int hwloc_get_type_depth (hwloc_topology_t topology, hwloc_obj_type_t type);
00765 
00766 enum hwloc_get_type_depth_e {
00767     HWLOC_TYPE_DEPTH_UNKNOWN = -1,    
00768     HWLOC_TYPE_DEPTH_MULTIPLE = -2,   
00769     HWLOC_TYPE_DEPTH_NUMANODE = -3,   
00770     HWLOC_TYPE_DEPTH_BRIDGE = -4,     
00771     HWLOC_TYPE_DEPTH_PCI_DEVICE = -5, 
00772     HWLOC_TYPE_DEPTH_OS_DEVICE = -6,  
00773     HWLOC_TYPE_DEPTH_MISC = -7        
00774 };
00775 
00795 HWLOC_DECLSPEC int hwloc_get_memory_parents_depth (hwloc_topology_t topology);
00796 
00810 static __hwloc_inline int
00811 hwloc_get_type_or_below_depth (hwloc_topology_t topology, hwloc_obj_type_t type) __hwloc_attribute_pure;
00812 
00826 static __hwloc_inline int
00827 hwloc_get_type_or_above_depth (hwloc_topology_t topology, hwloc_obj_type_t type) __hwloc_attribute_pure;
00828 
00835 HWLOC_DECLSPEC hwloc_obj_type_t hwloc_get_depth_type (hwloc_topology_t topology, int depth) __hwloc_attribute_pure;
00836 
00839 HWLOC_DECLSPEC unsigned hwloc_get_nbobjs_by_depth (hwloc_topology_t topology, int depth) __hwloc_attribute_pure;
00840 
00846 static __hwloc_inline int
00847 hwloc_get_nbobjs_by_type (hwloc_topology_t topology, hwloc_obj_type_t type) __hwloc_attribute_pure;
00848 
00853 static __hwloc_inline hwloc_obj_t
00854 hwloc_get_root_obj (hwloc_topology_t topology) __hwloc_attribute_pure;
00855 
00857 HWLOC_DECLSPEC hwloc_obj_t hwloc_get_obj_by_depth (hwloc_topology_t topology, int depth, unsigned idx) __hwloc_attribute_pure;
00858 
00865 static __hwloc_inline hwloc_obj_t
00866 hwloc_get_obj_by_type (hwloc_topology_t topology, hwloc_obj_type_t type, unsigned idx) __hwloc_attribute_pure;
00867 
00872 static __hwloc_inline hwloc_obj_t
00873 hwloc_get_next_obj_by_depth (hwloc_topology_t topology, int depth, hwloc_obj_t prev);
00874 
00881 static __hwloc_inline hwloc_obj_t
00882 hwloc_get_next_obj_by_type (hwloc_topology_t topology, hwloc_obj_type_t type,
00883                             hwloc_obj_t prev);
00884 
00901 HWLOC_DECLSPEC const char * hwloc_obj_type_string (hwloc_obj_type_t type) __hwloc_attribute_const;
00902 
00920 HWLOC_DECLSPEC int hwloc_obj_type_snprintf(char * __hwloc_restrict string, size_t size,
00921                                            hwloc_obj_t obj,
00922                                            int verbose);
00923 
00935 HWLOC_DECLSPEC int hwloc_obj_attr_snprintf(char * __hwloc_restrict string, size_t size,
00936                                            hwloc_obj_t obj, const char * __hwloc_restrict separator,
00937                                            int verbose);
00938 
00962 HWLOC_DECLSPEC int hwloc_type_sscanf(const char *string,
00963                                      hwloc_obj_type_t *typep,
00964                                      union hwloc_obj_attr_u *attrp, size_t attrsize);
00965 
00987 HWLOC_DECLSPEC int hwloc_type_sscanf_as_depth(const char *string,
00988                                               hwloc_obj_type_t *typep,
00989                                               hwloc_topology_t topology, int *depthp);
00990 
01006 static __hwloc_inline const char *
01007 hwloc_obj_get_info_by_name(hwloc_obj_t obj, const char *name) __hwloc_attribute_pure;
01008 
01025 HWLOC_DECLSPEC int hwloc_obj_add_info(hwloc_obj_t obj, const char *name, const char *value);
01026 
01098 typedef enum {
01101   HWLOC_CPUBIND_PROCESS = (1<<0),
01102 
01105   HWLOC_CPUBIND_THREAD = (1<<1),
01106 
01130   HWLOC_CPUBIND_STRICT = (1<<2),
01131 
01147   HWLOC_CPUBIND_NOMEMBIND = (1<<3)
01148 } hwloc_cpubind_flags_t;
01149 
01155 HWLOC_DECLSPEC int hwloc_set_cpubind(hwloc_topology_t topology, hwloc_const_cpuset_t set, int flags);
01156 
01162 HWLOC_DECLSPEC int hwloc_get_cpubind(hwloc_topology_t topology, hwloc_cpuset_t set, int flags);
01163 
01175 HWLOC_DECLSPEC int hwloc_set_proc_cpubind(hwloc_topology_t topology, hwloc_pid_t pid, hwloc_const_cpuset_t set, int flags);
01176 
01188 HWLOC_DECLSPEC int hwloc_get_proc_cpubind(hwloc_topology_t topology, hwloc_pid_t pid, hwloc_cpuset_t set, int flags);
01189 
01190 #ifdef hwloc_thread_t
01191 
01198 HWLOC_DECLSPEC int hwloc_set_thread_cpubind(hwloc_topology_t topology, hwloc_thread_t thread, hwloc_const_cpuset_t set, int flags);
01199 #endif
01200 
01201 #ifdef hwloc_thread_t
01202 
01209 HWLOC_DECLSPEC int hwloc_get_thread_cpubind(hwloc_topology_t topology, hwloc_thread_t thread, hwloc_cpuset_t set, int flags);
01210 #endif
01211 
01225 HWLOC_DECLSPEC int hwloc_get_last_cpu_location(hwloc_topology_t topology, hwloc_cpuset_t set, int flags);
01226 
01243 HWLOC_DECLSPEC int hwloc_get_proc_last_cpu_location(hwloc_topology_t topology, hwloc_pid_t pid, hwloc_cpuset_t set, int flags);
01244 
01324 typedef enum {
01332   HWLOC_MEMBIND_DEFAULT =       0,
01333 
01343   HWLOC_MEMBIND_FIRSTTOUCH =    1,
01344 
01347   HWLOC_MEMBIND_BIND =          2,
01348 
01356   HWLOC_MEMBIND_INTERLEAVE =    3,
01357 
01363   HWLOC_MEMBIND_NEXTTOUCH =     4,
01364 
01371   HWLOC_MEMBIND_MIXED = -1
01372 } hwloc_membind_policy_t;
01373 
01387 typedef enum {
01392   HWLOC_MEMBIND_PROCESS =       (1<<0),
01393 
01397   HWLOC_MEMBIND_THREAD =        (1<<1),
01398 
01405   HWLOC_MEMBIND_STRICT =        (1<<2),
01406 
01411   HWLOC_MEMBIND_MIGRATE =       (1<<3),
01412 
01424   HWLOC_MEMBIND_NOCPUBIND =     (1<<4),
01425 
01435   HWLOC_MEMBIND_BYNODESET =     (1<<5)
01436 } hwloc_membind_flags_t;
01437 
01453 HWLOC_DECLSPEC int hwloc_set_membind(hwloc_topology_t topology, hwloc_const_bitmap_t set, hwloc_membind_policy_t policy, int flags);
01454 
01499 HWLOC_DECLSPEC int hwloc_get_membind(hwloc_topology_t topology, hwloc_bitmap_t set, hwloc_membind_policy_t * policy, int flags);
01500 
01513 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);
01514 
01554 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);
01555 
01566 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);
01567 
01595 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);
01596 
01616 HWLOC_DECLSPEC int hwloc_get_area_memlocation(hwloc_topology_t topology, const void *addr, size_t len, hwloc_bitmap_t set, int flags);
01617 
01625 HWLOC_DECLSPEC void *hwloc_alloc(hwloc_topology_t topology, size_t len);
01626 
01641 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;
01642 
01652 static __hwloc_inline void *
01653 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;
01654 
01658 HWLOC_DECLSPEC int hwloc_free(hwloc_topology_t topology, void *addr, size_t len);
01659 
01696 HWLOC_DECLSPEC int hwloc_topology_set_pid(hwloc_topology_t __hwloc_restrict topology, hwloc_pid_t pid);
01697 
01726 HWLOC_DECLSPEC int hwloc_topology_set_synthetic(hwloc_topology_t __hwloc_restrict topology, const char * __hwloc_restrict description);
01727 
01754 HWLOC_DECLSPEC int hwloc_topology_set_xml(hwloc_topology_t __hwloc_restrict topology, const char * __hwloc_restrict xmlpath);
01755 
01782 HWLOC_DECLSPEC int hwloc_topology_set_xmlbuffer(hwloc_topology_t __hwloc_restrict topology, const char * __hwloc_restrict buffer, int size);
01783 
01802 enum hwloc_topology_flags_e {
01824   HWLOC_TOPOLOGY_FLAG_WHOLE_SYSTEM = (1UL<<0),
01825 
01844   HWLOC_TOPOLOGY_FLAG_IS_THISSYSTEM = (1UL<<1),
01845 
01865   HWLOC_TOPOLOGY_FLAG_THISSYSTEM_ALLOWED_RESOURCES = (1UL<<2)
01866 };
01867 
01877 HWLOC_DECLSPEC int hwloc_topology_set_flags (hwloc_topology_t topology, unsigned long flags);
01878 
01885 HWLOC_DECLSPEC unsigned long hwloc_topology_get_flags (hwloc_topology_t topology);
01886 
01894 HWLOC_DECLSPEC int hwloc_topology_is_thissystem(hwloc_topology_t  __hwloc_restrict topology) __hwloc_attribute_pure;
01895 
01897 struct hwloc_topology_discovery_support {
01899   unsigned char pu;
01901   unsigned char numa;
01903   unsigned char numa_memory;
01904 };
01905 
01911 struct hwloc_topology_cpubind_support {
01913   unsigned char set_thisproc_cpubind;
01915   unsigned char get_thisproc_cpubind;
01917   unsigned char set_proc_cpubind;
01919   unsigned char get_proc_cpubind;
01921   unsigned char set_thisthread_cpubind;
01923   unsigned char get_thisthread_cpubind;
01925   unsigned char set_thread_cpubind;
01927   unsigned char get_thread_cpubind;
01929   unsigned char get_thisproc_last_cpu_location;
01931   unsigned char get_proc_last_cpu_location;
01933   unsigned char get_thisthread_last_cpu_location;
01934 };
01935 
01941 struct hwloc_topology_membind_support {
01943   unsigned char set_thisproc_membind;
01945   unsigned char get_thisproc_membind;
01947   unsigned char set_proc_membind;
01949   unsigned char get_proc_membind;
01951   unsigned char set_thisthread_membind;
01953   unsigned char get_thisthread_membind;
01955   unsigned char set_area_membind;
01957   unsigned char get_area_membind;
01959   unsigned char alloc_membind;
01961   unsigned char firsttouch_membind;
01963   unsigned char bind_membind;
01965   unsigned char interleave_membind;
01967   unsigned char nexttouch_membind;
01969   unsigned char migrate_membind;
01971   unsigned char get_area_memlocation;
01972 };
01973 
01980 struct hwloc_topology_support {
01981   struct hwloc_topology_discovery_support *discovery;
01982   struct hwloc_topology_cpubind_support *cpubind;
01983   struct hwloc_topology_membind_support *membind;
01984 };
01985 
01995 HWLOC_DECLSPEC const struct hwloc_topology_support *hwloc_topology_get_support(hwloc_topology_t __hwloc_restrict topology);
01996 
02006 enum hwloc_type_filter_e {
02012   HWLOC_TYPE_FILTER_KEEP_ALL = 0,
02013 
02020   HWLOC_TYPE_FILTER_KEEP_NONE = 1,
02021 
02034   HWLOC_TYPE_FILTER_KEEP_STRUCTURE = 2,
02035 
02049   HWLOC_TYPE_FILTER_KEEP_IMPORTANT = 3
02050 };
02051 
02054 HWLOC_DECLSPEC int hwloc_topology_set_type_filter(hwloc_topology_t topology, hwloc_obj_type_t type, enum hwloc_type_filter_e filter);
02055 
02058 HWLOC_DECLSPEC int hwloc_topology_get_type_filter(hwloc_topology_t topology, hwloc_obj_type_t type, enum hwloc_type_filter_e *filter);
02059 
02064 HWLOC_DECLSPEC int hwloc_topology_set_all_types_filter(hwloc_topology_t topology, enum hwloc_type_filter_e filter);
02065 
02068 HWLOC_DECLSPEC int hwloc_topology_set_cache_types_filter(hwloc_topology_t topology, enum hwloc_type_filter_e filter);
02069 
02072 HWLOC_DECLSPEC int hwloc_topology_set_icache_types_filter(hwloc_topology_t topology, enum hwloc_type_filter_e filter);
02073 
02076 HWLOC_DECLSPEC int hwloc_topology_set_io_types_filter(hwloc_topology_t topology, enum hwloc_type_filter_e filter);
02077 
02088 HWLOC_DECLSPEC void hwloc_topology_set_userdata(hwloc_topology_t topology, const void *userdata);
02089 
02095 HWLOC_DECLSPEC void * hwloc_topology_get_userdata(hwloc_topology_t topology);
02096 
02106 enum hwloc_restrict_flags_e {
02111   HWLOC_RESTRICT_FLAG_REMOVE_CPULESS = (1UL<<0),
02112 
02117   HWLOC_RESTRICT_FLAG_ADAPT_MISC = (1UL<<1),
02118 
02123   HWLOC_RESTRICT_FLAG_ADAPT_IO = (1UL<<2)
02124 };
02125 
02147 HWLOC_DECLSPEC int hwloc_topology_restrict(hwloc_topology_t __hwloc_restrict topology, hwloc_const_cpuset_t cpuset, unsigned long flags);
02148 
02170 HWLOC_DECLSPEC hwloc_obj_t hwloc_topology_insert_misc_object(hwloc_topology_t topology, hwloc_obj_t parent, const char *name);
02171 
02192 HWLOC_DECLSPEC hwloc_obj_t hwloc_topology_alloc_group_object(hwloc_topology_t topology);
02193 
02230 HWLOC_DECLSPEC hwloc_obj_t hwloc_topology_insert_group_object(hwloc_topology_t topology, hwloc_obj_t group);
02231 
02241 HWLOC_DECLSPEC int hwloc_obj_add_other_obj_sets(hwloc_obj_t dst, hwloc_obj_t src);
02242 
02247 #ifdef __cplusplus
02248 } /* extern "C" */
02249 #endif
02250 
02251 
02252 /* high-level helpers */
02253 #include <hwloc/helper.h>
02254 
02255 /* inline code of some functions above */
02256 #include <hwloc/inlines.h>
02257 
02258 /* exporting to XML or synthetic */
02259 #include <hwloc/export.h>
02260 
02261 /* distances */
02262 #include <hwloc/distances.h>
02263 
02264 /* topology diffs */
02265 #include <hwloc/diff.h>
02266 
02267 /* deprecated headers */
02268 #include <hwloc/deprecated.h>
02269 
02270 #endif /* HWLOC_H */