Hardware Locality (hwloc)  v2.1-20200123.0330.git0a8b367
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 
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 
00367 enum hwloc_compare_types_e {
00368     HWLOC_TYPE_UNORDERED = INT_MAX      
00369 };
00370 
00379 union hwloc_obj_attr_u;
00380 
00385 struct hwloc_obj {
00386   /* physical information */
00387   hwloc_obj_type_t type;                
00388   char *subtype;                        
00390   unsigned os_index;                    
00395 #define HWLOC_UNKNOWN_INDEX (unsigned)-1
00396 
00397   char *name;                           
00402   hwloc_uint64_t total_memory; 
00404   union hwloc_obj_attr_u *attr;         
00407   /* global position */
00408   int depth;                            
00423   unsigned logical_index;               
00430   /* cousins are all objects of the same type (and depth) across the entire topology */
00431   struct hwloc_obj *next_cousin;        
00432   struct hwloc_obj *prev_cousin;        
00434   /* children of the same parent are siblings, even if they may have different type and depth */
00435   struct hwloc_obj *parent;             
00436   unsigned sibling_rank;                
00437   struct hwloc_obj *next_sibling;       
00438   struct hwloc_obj *prev_sibling;       
00441   unsigned arity;                       
00445   struct hwloc_obj **children;          
00446   struct hwloc_obj *first_child;        
00447   struct hwloc_obj *last_child;         
00450   int symmetric_subtree;                
00461   unsigned memory_arity;                
00464   struct hwloc_obj *memory_first_child; 
00479   unsigned io_arity;                    
00482   struct hwloc_obj *io_first_child;     
00491   unsigned misc_arity;                  
00494   struct hwloc_obj *misc_first_child;   
00500   /* cpusets and nodesets */
00501   hwloc_cpuset_t cpuset;                
00516   hwloc_cpuset_t complete_cpuset;       
00529   hwloc_nodeset_t nodeset;              
00549   hwloc_nodeset_t complete_nodeset;     
00565   struct hwloc_info_s *infos;           
00566   unsigned infos_count;                 
00568   /* misc */
00569   void *userdata;                       
00574   hwloc_uint64_t gp_index;                      
00579 };
00583 typedef struct hwloc_obj * hwloc_obj_t;
00584 
00586 union hwloc_obj_attr_u {
00588   struct hwloc_numanode_attr_s {
00589     hwloc_uint64_t local_memory; 
00590     unsigned page_types_len; 
00596     struct hwloc_memory_page_type_s {
00597       hwloc_uint64_t size;      
00598       hwloc_uint64_t count;     
00599     } * page_types;
00600   } numanode;
00601 
00603   struct hwloc_cache_attr_s {
00604     hwloc_uint64_t size;                  
00605     unsigned depth;                       
00606     unsigned linesize;                    
00607     int associativity;                    
00609     hwloc_obj_cache_type_t type;          
00610   } cache;
00612   struct hwloc_group_attr_s {
00613     unsigned depth;                       
00615     unsigned kind;                        
00616     unsigned subkind;                     
00617     unsigned char dont_merge;             
00618   } group;
00620   struct hwloc_pcidev_attr_s {
00621     unsigned short domain;
00622     unsigned char bus, dev, func;
00623     unsigned short class_id;
00624     unsigned short vendor_id, device_id, subvendor_id, subdevice_id;
00625     unsigned char revision;
00626     float linkspeed; /* in GB/s */
00627   } pcidev;
00629   struct hwloc_bridge_attr_s {
00630     union {
00631       struct hwloc_pcidev_attr_s pci;
00632     } upstream;
00633     hwloc_obj_bridge_type_t upstream_type;
00634     union {
00635       struct {
00636         unsigned short domain;
00637         unsigned char secondary_bus, subordinate_bus;
00638       } pci;
00639     } downstream;
00640     hwloc_obj_bridge_type_t downstream_type;
00641     unsigned depth;
00642   } bridge;
00644   struct hwloc_osdev_attr_s {
00645     hwloc_obj_osdev_type_t type;
00646   } osdev;
00647 };
00648 
00653 struct hwloc_info_s {
00654   char *name;   
00655   char *value;  
00656 };
00657 
00666 struct hwloc_topology;
00671 typedef struct hwloc_topology * hwloc_topology_t;
00672 
00679 HWLOC_DECLSPEC int hwloc_topology_init (hwloc_topology_t *topologyp);
00680 
00701 HWLOC_DECLSPEC int hwloc_topology_load(hwloc_topology_t topology);
00702 
00707 HWLOC_DECLSPEC void hwloc_topology_destroy (hwloc_topology_t topology);
00708 
00719 HWLOC_DECLSPEC int hwloc_topology_dup(hwloc_topology_t *newtopology, hwloc_topology_t oldtopology);
00720 
00738 HWLOC_DECLSPEC int hwloc_topology_abi_check(hwloc_topology_t topology);
00739 
00751 HWLOC_DECLSPEC void hwloc_topology_check(hwloc_topology_t topology);
00752 
00773 HWLOC_DECLSPEC int hwloc_topology_get_depth(hwloc_topology_t __hwloc_restrict topology) __hwloc_attribute_pure;
00774 
00798 HWLOC_DECLSPEC int hwloc_get_type_depth (hwloc_topology_t topology, hwloc_obj_type_t type);
00799 
00800 enum hwloc_get_type_depth_e {
00801     HWLOC_TYPE_DEPTH_UNKNOWN = -1,    
00802     HWLOC_TYPE_DEPTH_MULTIPLE = -2,   
00803     HWLOC_TYPE_DEPTH_NUMANODE = -3,   
00804     HWLOC_TYPE_DEPTH_BRIDGE = -4,     
00805     HWLOC_TYPE_DEPTH_PCI_DEVICE = -5, 
00806     HWLOC_TYPE_DEPTH_OS_DEVICE = -6,  
00807     HWLOC_TYPE_DEPTH_MISC = -7,       
00808     HWLOC_TYPE_DEPTH_MEMCACHE = -8    
00809 };
00810 
00830 HWLOC_DECLSPEC int hwloc_get_memory_parents_depth (hwloc_topology_t topology);
00831 
00845 static __hwloc_inline int
00846 hwloc_get_type_or_below_depth (hwloc_topology_t topology, hwloc_obj_type_t type) __hwloc_attribute_pure;
00847 
00861 static __hwloc_inline int
00862 hwloc_get_type_or_above_depth (hwloc_topology_t topology, hwloc_obj_type_t type) __hwloc_attribute_pure;
00863 
00871 HWLOC_DECLSPEC hwloc_obj_type_t hwloc_get_depth_type (hwloc_topology_t topology, int depth) __hwloc_attribute_pure;
00872 
00875 HWLOC_DECLSPEC unsigned hwloc_get_nbobjs_by_depth (hwloc_topology_t topology, int depth) __hwloc_attribute_pure;
00876 
00882 static __hwloc_inline int
00883 hwloc_get_nbobjs_by_type (hwloc_topology_t topology, hwloc_obj_type_t type) __hwloc_attribute_pure;
00884 
00889 static __hwloc_inline hwloc_obj_t
00890 hwloc_get_root_obj (hwloc_topology_t topology) __hwloc_attribute_pure;
00891 
00893 HWLOC_DECLSPEC hwloc_obj_t hwloc_get_obj_by_depth (hwloc_topology_t topology, int depth, unsigned idx) __hwloc_attribute_pure;
00894 
00901 static __hwloc_inline hwloc_obj_t
00902 hwloc_get_obj_by_type (hwloc_topology_t topology, hwloc_obj_type_t type, unsigned idx) __hwloc_attribute_pure;
00903 
00908 static __hwloc_inline hwloc_obj_t
00909 hwloc_get_next_obj_by_depth (hwloc_topology_t topology, int depth, hwloc_obj_t prev);
00910 
00917 static __hwloc_inline hwloc_obj_t
00918 hwloc_get_next_obj_by_type (hwloc_topology_t topology, hwloc_obj_type_t type,
00919                             hwloc_obj_t prev);
00920 
00937 HWLOC_DECLSPEC const char * hwloc_obj_type_string (hwloc_obj_type_t type) __hwloc_attribute_const;
00938 
00956 HWLOC_DECLSPEC int hwloc_obj_type_snprintf(char * __hwloc_restrict string, size_t size,
00957                                            hwloc_obj_t obj,
00958                                            int verbose);
00959 
00971 HWLOC_DECLSPEC int hwloc_obj_attr_snprintf(char * __hwloc_restrict string, size_t size,
00972                                            hwloc_obj_t obj, const char * __hwloc_restrict separator,
00973                                            int verbose);
00974 
00998 HWLOC_DECLSPEC int hwloc_type_sscanf(const char *string,
00999                                      hwloc_obj_type_t *typep,
01000                                      union hwloc_obj_attr_u *attrp, size_t attrsize);
01001 
01023 HWLOC_DECLSPEC int hwloc_type_sscanf_as_depth(const char *string,
01024                                               hwloc_obj_type_t *typep,
01025                                               hwloc_topology_t topology, int *depthp);
01026 
01042 static __hwloc_inline const char *
01043 hwloc_obj_get_info_by_name(hwloc_obj_t obj, const char *name) __hwloc_attribute_pure;
01044 
01061 HWLOC_DECLSPEC int hwloc_obj_add_info(hwloc_obj_t obj, const char *name, const char *value);
01062 
01134 typedef enum {
01137   HWLOC_CPUBIND_PROCESS = (1<<0),
01138 
01141   HWLOC_CPUBIND_THREAD = (1<<1),
01142 
01166   HWLOC_CPUBIND_STRICT = (1<<2),
01167 
01183   HWLOC_CPUBIND_NOMEMBIND = (1<<3)
01184 } hwloc_cpubind_flags_t;
01185 
01191 HWLOC_DECLSPEC int hwloc_set_cpubind(hwloc_topology_t topology, hwloc_const_cpuset_t set, int flags);
01192 
01198 HWLOC_DECLSPEC int hwloc_get_cpubind(hwloc_topology_t topology, hwloc_cpuset_t set, int flags);
01199 
01211 HWLOC_DECLSPEC int hwloc_set_proc_cpubind(hwloc_topology_t topology, hwloc_pid_t pid, hwloc_const_cpuset_t set, int flags);
01212 
01224 HWLOC_DECLSPEC int hwloc_get_proc_cpubind(hwloc_topology_t topology, hwloc_pid_t pid, hwloc_cpuset_t set, int flags);
01225 
01226 #ifdef hwloc_thread_t
01227 
01234 HWLOC_DECLSPEC int hwloc_set_thread_cpubind(hwloc_topology_t topology, hwloc_thread_t thread, hwloc_const_cpuset_t set, int flags);
01235 #endif
01236 
01237 #ifdef hwloc_thread_t
01238 
01245 HWLOC_DECLSPEC int hwloc_get_thread_cpubind(hwloc_topology_t topology, hwloc_thread_t thread, hwloc_cpuset_t set, int flags);
01246 #endif
01247 
01261 HWLOC_DECLSPEC int hwloc_get_last_cpu_location(hwloc_topology_t topology, hwloc_cpuset_t set, int flags);
01262 
01279 HWLOC_DECLSPEC int hwloc_get_proc_last_cpu_location(hwloc_topology_t topology, hwloc_pid_t pid, hwloc_cpuset_t set, int flags);
01280 
01360 typedef enum {
01368   HWLOC_MEMBIND_DEFAULT =       0,
01369 
01379   HWLOC_MEMBIND_FIRSTTOUCH =    1,
01380 
01383   HWLOC_MEMBIND_BIND =          2,
01384 
01392   HWLOC_MEMBIND_INTERLEAVE =    3,
01393 
01399   HWLOC_MEMBIND_NEXTTOUCH =     4,
01400 
01407   HWLOC_MEMBIND_MIXED = -1
01408 } hwloc_membind_policy_t;
01409 
01423 typedef enum {
01428   HWLOC_MEMBIND_PROCESS =       (1<<0),
01429 
01433   HWLOC_MEMBIND_THREAD =        (1<<1),
01434 
01441   HWLOC_MEMBIND_STRICT =        (1<<2),
01442 
01447   HWLOC_MEMBIND_MIGRATE =       (1<<3),
01448 
01460   HWLOC_MEMBIND_NOCPUBIND =     (1<<4),
01461 
01471   HWLOC_MEMBIND_BYNODESET =     (1<<5)
01472 } hwloc_membind_flags_t;
01473 
01489 HWLOC_DECLSPEC int hwloc_set_membind(hwloc_topology_t topology, hwloc_const_bitmap_t set, hwloc_membind_policy_t policy, int flags);
01490 
01535 HWLOC_DECLSPEC int hwloc_get_membind(hwloc_topology_t topology, hwloc_bitmap_t set, hwloc_membind_policy_t * policy, int flags);
01536 
01549 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);
01550 
01590 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);
01591 
01602 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);
01603 
01631 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);
01632 
01652 HWLOC_DECLSPEC int hwloc_get_area_memlocation(hwloc_topology_t topology, const void *addr, size_t len, hwloc_bitmap_t set, int flags);
01653 
01661 HWLOC_DECLSPEC void *hwloc_alloc(hwloc_topology_t topology, size_t len);
01662 
01677 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;
01678 
01688 static __hwloc_inline void *
01689 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;
01690 
01694 HWLOC_DECLSPEC int hwloc_free(hwloc_topology_t topology, void *addr, size_t len);
01695 
01732 HWLOC_DECLSPEC int hwloc_topology_set_pid(hwloc_topology_t __hwloc_restrict topology, hwloc_pid_t pid);
01733 
01762 HWLOC_DECLSPEC int hwloc_topology_set_synthetic(hwloc_topology_t __hwloc_restrict topology, const char * __hwloc_restrict description);
01763 
01790 HWLOC_DECLSPEC int hwloc_topology_set_xml(hwloc_topology_t __hwloc_restrict topology, const char * __hwloc_restrict xmlpath);
01791 
01818 HWLOC_DECLSPEC int hwloc_topology_set_xmlbuffer(hwloc_topology_t __hwloc_restrict topology, const char * __hwloc_restrict buffer, int size);
01819 
01822 enum hwloc_topology_components_flag_e {
01826   HWLOC_TOPOLOGY_COMPONENTS_FLAG_BLACKLIST = (1UL<<0)
01827 };
01828 
01843 HWLOC_DECLSPEC int hwloc_topology_set_components(hwloc_topology_t __hwloc_restrict topology, unsigned long flags, const char * __hwloc_restrict name);
01844 
01863 enum hwloc_topology_flags_e {
01884   HWLOC_TOPOLOGY_FLAG_INCLUDE_DISALLOWED = (1UL<<0),
01885 
01904   HWLOC_TOPOLOGY_FLAG_IS_THISSYSTEM = (1UL<<1),
01905 
01925   HWLOC_TOPOLOGY_FLAG_THISSYSTEM_ALLOWED_RESOURCES = (1UL<<2)
01926 };
01927 
01937 HWLOC_DECLSPEC int hwloc_topology_set_flags (hwloc_topology_t topology, unsigned long flags);
01938 
01945 HWLOC_DECLSPEC unsigned long hwloc_topology_get_flags (hwloc_topology_t topology);
01946 
01954 HWLOC_DECLSPEC int hwloc_topology_is_thissystem(hwloc_topology_t  __hwloc_restrict topology) __hwloc_attribute_pure;
01955 
01957 struct hwloc_topology_discovery_support {
01959   unsigned char pu;
01961   unsigned char numa;
01963   unsigned char numa_memory;
01965   unsigned char disallowed_pu;
01967   unsigned char disallowed_numa;
01968 };
01969 
01975 struct hwloc_topology_cpubind_support {
01977   unsigned char set_thisproc_cpubind;
01979   unsigned char get_thisproc_cpubind;
01981   unsigned char set_proc_cpubind;
01983   unsigned char get_proc_cpubind;
01985   unsigned char set_thisthread_cpubind;
01987   unsigned char get_thisthread_cpubind;
01989   unsigned char set_thread_cpubind;
01991   unsigned char get_thread_cpubind;
01993   unsigned char get_thisproc_last_cpu_location;
01995   unsigned char get_proc_last_cpu_location;
01997   unsigned char get_thisthread_last_cpu_location;
01998 };
01999 
02005 struct hwloc_topology_membind_support {
02007   unsigned char set_thisproc_membind;
02009   unsigned char get_thisproc_membind;
02011   unsigned char set_proc_membind;
02013   unsigned char get_proc_membind;
02015   unsigned char set_thisthread_membind;
02017   unsigned char get_thisthread_membind;
02019   unsigned char set_area_membind;
02021   unsigned char get_area_membind;
02023   unsigned char alloc_membind;
02025   unsigned char firsttouch_membind;
02027   unsigned char bind_membind;
02029   unsigned char interleave_membind;
02031   unsigned char nexttouch_membind;
02033   unsigned char migrate_membind;
02035   unsigned char get_area_memlocation;
02036 };
02037 
02044 struct hwloc_topology_support {
02045   struct hwloc_topology_discovery_support *discovery;
02046   struct hwloc_topology_cpubind_support *cpubind;
02047   struct hwloc_topology_membind_support *membind;
02048 };
02049 
02059 HWLOC_DECLSPEC const struct hwloc_topology_support *hwloc_topology_get_support(hwloc_topology_t __hwloc_restrict topology);
02060 
02070 enum hwloc_type_filter_e {
02076   HWLOC_TYPE_FILTER_KEEP_ALL = 0,
02077 
02084   HWLOC_TYPE_FILTER_KEEP_NONE = 1,
02085 
02098   HWLOC_TYPE_FILTER_KEEP_STRUCTURE = 2,
02099 
02113   HWLOC_TYPE_FILTER_KEEP_IMPORTANT = 3
02114 };
02115 
02118 HWLOC_DECLSPEC int hwloc_topology_set_type_filter(hwloc_topology_t topology, hwloc_obj_type_t type, enum hwloc_type_filter_e filter);
02119 
02122 HWLOC_DECLSPEC int hwloc_topology_get_type_filter(hwloc_topology_t topology, hwloc_obj_type_t type, enum hwloc_type_filter_e *filter);
02123 
02128 HWLOC_DECLSPEC int hwloc_topology_set_all_types_filter(hwloc_topology_t topology, enum hwloc_type_filter_e filter);
02129 
02134 HWLOC_DECLSPEC int hwloc_topology_set_cache_types_filter(hwloc_topology_t topology, enum hwloc_type_filter_e filter);
02135 
02140 HWLOC_DECLSPEC int hwloc_topology_set_icache_types_filter(hwloc_topology_t topology, enum hwloc_type_filter_e filter);
02141 
02144 HWLOC_DECLSPEC int hwloc_topology_set_io_types_filter(hwloc_topology_t topology, enum hwloc_type_filter_e filter);
02145 
02156 HWLOC_DECLSPEC void hwloc_topology_set_userdata(hwloc_topology_t topology, const void *userdata);
02157 
02163 HWLOC_DECLSPEC void * hwloc_topology_get_userdata(hwloc_topology_t topology);
02164 
02174 enum hwloc_restrict_flags_e {
02179   HWLOC_RESTRICT_FLAG_REMOVE_CPULESS = (1UL<<0),
02180 
02185   HWLOC_RESTRICT_FLAG_BYNODESET =  (1UL<<3),
02186 
02192   HWLOC_RESTRICT_FLAG_REMOVE_MEMLESS = (1UL<<4),
02193 
02198   HWLOC_RESTRICT_FLAG_ADAPT_MISC = (1UL<<1),
02199 
02204   HWLOC_RESTRICT_FLAG_ADAPT_IO = (1UL<<2)
02205 };
02206 
02231 HWLOC_DECLSPEC int hwloc_topology_restrict(hwloc_topology_t __hwloc_restrict topology, hwloc_const_bitmap_t set, unsigned long flags);
02232 
02234 enum hwloc_allow_flags_e {
02239   HWLOC_ALLOW_FLAG_ALL = (1UL<<0),
02240 
02248   HWLOC_ALLOW_FLAG_LOCAL_RESTRICTIONS = (1UL<<1),
02249 
02252   HWLOC_ALLOW_FLAG_CUSTOM = (1UL<<2)
02253 };
02254 
02270 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);
02271 
02293 HWLOC_DECLSPEC hwloc_obj_t hwloc_topology_insert_misc_object(hwloc_topology_t topology, hwloc_obj_t parent, const char *name);
02294 
02315 HWLOC_DECLSPEC hwloc_obj_t hwloc_topology_alloc_group_object(hwloc_topology_t topology);
02316 
02353 HWLOC_DECLSPEC hwloc_obj_t hwloc_topology_insert_group_object(hwloc_topology_t topology, hwloc_obj_t group);
02354 
02364 HWLOC_DECLSPEC int hwloc_obj_add_other_obj_sets(hwloc_obj_t dst, hwloc_obj_t src);
02365 
02370 #ifdef __cplusplus
02371 } /* extern "C" */
02372 #endif
02373 
02374 
02375 /* high-level helpers */
02376 #include "hwloc/helper.h"
02377 
02378 /* inline code of some functions above */
02379 #include "hwloc/inlines.h"
02380 
02381 /* exporting to XML or synthetic */
02382 #include "hwloc/export.h"
02383 
02384 /* distances */
02385 #include "hwloc/distances.h"
02386 
02387 /* topology diffs */
02388 #include "hwloc/diff.h"
02389 
02390 /* deprecated headers */
02391 #include "hwloc/deprecated.h"
02392 
02393 #endif /* HWLOC_H */