Hardware Locality (hwloc)
v2.1-20200123.0330.git0a8b367
|
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 */