Hardware Locality (hwloc)
v2.2-20200408.0300.gitad4a86f
|
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 */