00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00047 #ifndef HWLOC_H
00048 #define HWLOC_H
00049
00050 #include <hwloc/autogen/config.h>
00051 #include <sys/types.h>
00052 #include <stdio.h>
00053 #include <string.h>
00054 #include <limits.h>
00055
00056
00057
00058
00059 #include <hwloc/rename.h>
00060
00061
00062
00063
00064
00065 #include <hwloc/bitmap.h>
00066
00067
00068 #ifdef __cplusplus
00069 extern "C" {
00070 #endif
00071
00072
00078 #define HWLOC_API_VERSION 0x00010900
00079
00081 HWLOC_DECLSPEC unsigned hwloc_get_api_version(void);
00082
00084 #define HWLOC_COMPONENT_ABI 3
00085
00116 typedef hwloc_bitmap_t hwloc_cpuset_t;
00118 typedef hwloc_const_bitmap_t hwloc_const_cpuset_t;
00119
00133 typedef hwloc_bitmap_t hwloc_nodeset_t;
00136 typedef hwloc_const_bitmap_t hwloc_const_nodeset_t;
00137
00152 typedef enum {
00153
00154
00155
00156
00157
00158
00159
00160
00161
00162 HWLOC_OBJ_SYSTEM,
00167 HWLOC_OBJ_MACHINE,
00172 HWLOC_OBJ_NODE,
00176 HWLOC_OBJ_SOCKET,
00180 HWLOC_OBJ_CACHE,
00183 HWLOC_OBJ_CORE,
00187 HWLOC_OBJ_PU,
00196 HWLOC_OBJ_GROUP,
00208 HWLOC_OBJ_MISC,
00213 HWLOC_OBJ_BRIDGE,
00220 HWLOC_OBJ_PCI_DEVICE,
00225 HWLOC_OBJ_OS_DEVICE,
00231 HWLOC_OBJ_TYPE_MAX
00233
00234
00235
00236
00237
00238
00239
00240
00241 } hwloc_obj_type_t;
00242
00244 typedef enum hwloc_obj_cache_type_e {
00245 HWLOC_OBJ_CACHE_UNIFIED,
00246 HWLOC_OBJ_CACHE_DATA,
00247 HWLOC_OBJ_CACHE_INSTRUCTION
00249 } hwloc_obj_cache_type_t;
00250
00252 typedef enum hwloc_obj_bridge_type_e {
00253 HWLOC_OBJ_BRIDGE_HOST,
00254 HWLOC_OBJ_BRIDGE_PCI
00255 } hwloc_obj_bridge_type_t;
00256
00258 typedef enum hwloc_obj_osdev_type_e {
00259 HWLOC_OBJ_OSDEV_BLOCK,
00261 HWLOC_OBJ_OSDEV_GPU,
00264 HWLOC_OBJ_OSDEV_NETWORK,
00266 HWLOC_OBJ_OSDEV_OPENFABRICS,
00268 HWLOC_OBJ_OSDEV_DMA,
00270 HWLOC_OBJ_OSDEV_COPROC
00274 } hwloc_obj_osdev_type_t;
00275
00293 HWLOC_DECLSPEC int hwloc_compare_types (hwloc_obj_type_t type1, hwloc_obj_type_t type2) __hwloc_attribute_const;
00294
00295 enum hwloc_compare_types_e {
00296 HWLOC_TYPE_UNORDERED = INT_MAX
00297 };
00298
00307 union hwloc_obj_attr_u;
00308
00310 struct hwloc_obj_memory_s {
00311 hwloc_uint64_t total_memory;
00312 hwloc_uint64_t local_memory;
00315 unsigned page_types_len;
00321 struct hwloc_obj_memory_page_type_s {
00322 hwloc_uint64_t size;
00323 hwloc_uint64_t count;
00324 } * page_types;
00325 };
00326
00331 struct hwloc_obj {
00332
00333 hwloc_obj_type_t type;
00334 unsigned os_index;
00338 char *name;
00340 struct hwloc_obj_memory_s memory;
00342 union hwloc_obj_attr_u *attr;
00345
00346 unsigned depth;
00351 unsigned logical_index;
00355 signed os_level;
00357
00358 struct hwloc_obj *next_cousin;
00359 struct hwloc_obj *prev_cousin;
00361
00362 struct hwloc_obj *parent;
00363 unsigned sibling_rank;
00364 struct hwloc_obj *next_sibling;
00365 struct hwloc_obj *prev_sibling;
00367
00368 unsigned arity;
00369 struct hwloc_obj **children;
00370 struct hwloc_obj *first_child;
00371 struct hwloc_obj *last_child;
00373
00374 void *userdata;
00379
00380 hwloc_cpuset_t cpuset;
00393 hwloc_cpuset_t complete_cpuset;
00404 hwloc_cpuset_t online_cpuset;
00412 hwloc_cpuset_t allowed_cpuset;
00423 hwloc_nodeset_t nodeset;
00440 hwloc_nodeset_t complete_nodeset;
00454 hwloc_nodeset_t allowed_nodeset;
00467 struct hwloc_distances_s **distances;
00468 unsigned distances_count;
00469
00470 struct hwloc_obj_info_s *infos;
00471 unsigned infos_count;
00473 int symmetric_subtree;
00478 };
00482 typedef struct hwloc_obj * hwloc_obj_t;
00483
00485 union hwloc_obj_attr_u {
00487 struct hwloc_cache_attr_s {
00488 hwloc_uint64_t size;
00489 unsigned depth;
00490 unsigned linesize;
00491 int associativity;
00493 hwloc_obj_cache_type_t type;
00494 } cache;
00496 struct hwloc_group_attr_s {
00497 unsigned depth;
00498 } group;
00500 struct hwloc_pcidev_attr_s {
00501 unsigned short domain;
00502 unsigned char bus, dev, func;
00503 unsigned short class_id;
00504 unsigned short vendor_id, device_id, subvendor_id, subdevice_id;
00505 unsigned char revision;
00506 float linkspeed;
00507 } pcidev;
00509 struct hwloc_bridge_attr_s {
00510 union {
00511 struct hwloc_pcidev_attr_s pci;
00512 } upstream;
00513 hwloc_obj_bridge_type_t upstream_type;
00514 union {
00515 struct {
00516 unsigned short domain;
00517 unsigned char secondary_bus, subordinate_bus;
00518 } pci;
00519 } downstream;
00520 hwloc_obj_bridge_type_t downstream_type;
00521 unsigned depth;
00522 } bridge;
00524 struct hwloc_osdev_attr_s {
00525 hwloc_obj_osdev_type_t type;
00526 } osdev;
00527 };
00528
00543 struct hwloc_distances_s {
00544 unsigned relative_depth;
00546 unsigned nbobjs;
00551 float *latency;
00556 float latency_max;
00557 float latency_base;
00561 };
00562
00564 struct hwloc_obj_info_s {
00565 char *name;
00566 char *value;
00567 };
00568
00577 struct hwloc_topology;
00582 typedef struct hwloc_topology * hwloc_topology_t;
00583
00590 HWLOC_DECLSPEC int hwloc_topology_init (hwloc_topology_t *topologyp);
00591
00609 HWLOC_DECLSPEC int hwloc_topology_load(hwloc_topology_t topology);
00610
00615 HWLOC_DECLSPEC void hwloc_topology_destroy (hwloc_topology_t topology);
00616
00628 HWLOC_DECLSPEC void hwloc_topology_check(hwloc_topology_t topology);
00629
00664 HWLOC_DECLSPEC int hwloc_topology_ignore_type(hwloc_topology_t topology, hwloc_obj_type_t type);
00665
00674 HWLOC_DECLSPEC int hwloc_topology_ignore_type_keep_structure(hwloc_topology_t topology, hwloc_obj_type_t type);
00675
00682 HWLOC_DECLSPEC int hwloc_topology_ignore_all_keep_structure(hwloc_topology_t topology);
00683
00689 enum hwloc_topology_flags_e {
00701 HWLOC_TOPOLOGY_FLAG_WHOLE_SYSTEM = (1UL<<0),
00702
00721 HWLOC_TOPOLOGY_FLAG_IS_THISSYSTEM = (1UL<<1),
00722
00733 HWLOC_TOPOLOGY_FLAG_IO_DEVICES = (1UL<<2),
00734
00742 HWLOC_TOPOLOGY_FLAG_IO_BRIDGES = (1UL<<3),
00743
00751 HWLOC_TOPOLOGY_FLAG_WHOLE_IO = (1UL<<4),
00752
00759 HWLOC_TOPOLOGY_FLAG_ICACHES = (1UL<<5)
00760 };
00761
00771 HWLOC_DECLSPEC int hwloc_topology_set_flags (hwloc_topology_t topology, unsigned long flags);
00772
00779 HWLOC_DECLSPEC unsigned long hwloc_topology_get_flags (hwloc_topology_t topology);
00780
00795 HWLOC_DECLSPEC int hwloc_topology_set_pid(hwloc_topology_t __hwloc_restrict topology, hwloc_pid_t pid);
00796
00823 HWLOC_DECLSPEC int hwloc_topology_set_fsroot(hwloc_topology_t __hwloc_restrict topology, const char * __hwloc_restrict fsroot_path);
00824
00852 HWLOC_DECLSPEC int hwloc_topology_set_synthetic(hwloc_topology_t __hwloc_restrict topology, const char * __hwloc_restrict description);
00853
00880 HWLOC_DECLSPEC int hwloc_topology_set_xml(hwloc_topology_t __hwloc_restrict topology, const char * __hwloc_restrict xmlpath);
00881
00908 HWLOC_DECLSPEC int hwloc_topology_set_xmlbuffer(hwloc_topology_t __hwloc_restrict topology, const char * __hwloc_restrict buffer, int size);
00909
00929 HWLOC_DECLSPEC int hwloc_topology_set_custom(hwloc_topology_t topology);
00930
00948 HWLOC_DECLSPEC int hwloc_topology_set_distance_matrix(hwloc_topology_t __hwloc_restrict topology,
00949 hwloc_obj_type_t type, unsigned nbobjs,
00950 unsigned *os_index, float *distances);
00951
00959 HWLOC_DECLSPEC int hwloc_topology_is_thissystem(hwloc_topology_t __hwloc_restrict topology) __hwloc_attribute_pure;
00960
00962 struct hwloc_topology_discovery_support {
00964 unsigned char pu;
00965 };
00966
00968 struct hwloc_topology_cpubind_support {
00970 unsigned char set_thisproc_cpubind;
00972 unsigned char get_thisproc_cpubind;
00974 unsigned char set_proc_cpubind;
00976 unsigned char get_proc_cpubind;
00978 unsigned char set_thisthread_cpubind;
00980 unsigned char get_thisthread_cpubind;
00982 unsigned char set_thread_cpubind;
00984 unsigned char get_thread_cpubind;
00986 unsigned char get_thisproc_last_cpu_location;
00988 unsigned char get_proc_last_cpu_location;
00990 unsigned char get_thisthread_last_cpu_location;
00991 };
00992
00994 struct hwloc_topology_membind_support {
00996 unsigned char set_thisproc_membind;
00998 unsigned char get_thisproc_membind;
01000 unsigned char set_proc_membind;
01002 unsigned char get_proc_membind;
01004 unsigned char set_thisthread_membind;
01006 unsigned char get_thisthread_membind;
01008 unsigned char set_area_membind;
01010 unsigned char get_area_membind;
01012 unsigned char alloc_membind;
01014 unsigned char firsttouch_membind;
01016 unsigned char bind_membind;
01018 unsigned char interleave_membind;
01020 unsigned char replicate_membind;
01022 unsigned char nexttouch_membind;
01023
01025 unsigned char migrate_membind;
01026 };
01027
01034 struct hwloc_topology_support {
01035 struct hwloc_topology_discovery_support *discovery;
01036 struct hwloc_topology_cpubind_support *cpubind;
01037 struct hwloc_topology_membind_support *membind;
01038 };
01039
01041 HWLOC_DECLSPEC const struct hwloc_topology_support *hwloc_topology_get_support(hwloc_topology_t __hwloc_restrict topology);
01042
01060 HWLOC_DECLSPEC unsigned hwloc_topology_get_depth(hwloc_topology_t __hwloc_restrict topology) __hwloc_attribute_pure;
01061
01084 HWLOC_DECLSPEC int hwloc_get_type_depth (hwloc_topology_t topology, hwloc_obj_type_t type);
01085
01086 enum hwloc_get_type_depth_e {
01087 HWLOC_TYPE_DEPTH_UNKNOWN = -1,
01088 HWLOC_TYPE_DEPTH_MULTIPLE = -2,
01089 HWLOC_TYPE_DEPTH_BRIDGE = -3,
01090 HWLOC_TYPE_DEPTH_PCI_DEVICE = -4,
01091 HWLOC_TYPE_DEPTH_OS_DEVICE = -5
01092 };
01093
01103 static __hwloc_inline int
01104 hwloc_get_type_or_below_depth (hwloc_topology_t topology, hwloc_obj_type_t type) __hwloc_attribute_pure;
01105
01115 static __hwloc_inline int
01116 hwloc_get_type_or_above_depth (hwloc_topology_t topology, hwloc_obj_type_t type) __hwloc_attribute_pure;
01117
01122 HWLOC_DECLSPEC hwloc_obj_type_t hwloc_get_depth_type (hwloc_topology_t topology, unsigned depth) __hwloc_attribute_pure;
01123
01126 HWLOC_DECLSPEC unsigned hwloc_get_nbobjs_by_depth (hwloc_topology_t topology, unsigned depth) __hwloc_attribute_pure;
01127
01133 static __hwloc_inline int
01134 hwloc_get_nbobjs_by_type (hwloc_topology_t topology, hwloc_obj_type_t type) __hwloc_attribute_pure;
01135
01141 static __hwloc_inline hwloc_obj_t
01142 hwloc_get_root_obj (hwloc_topology_t topology) __hwloc_attribute_pure;
01143
01145 HWLOC_DECLSPEC hwloc_obj_t hwloc_get_obj_by_depth (hwloc_topology_t topology, unsigned depth, unsigned idx) __hwloc_attribute_pure;
01146
01153 static __hwloc_inline hwloc_obj_t
01154 hwloc_get_obj_by_type (hwloc_topology_t topology, hwloc_obj_type_t type, unsigned idx) __hwloc_attribute_pure;
01155
01160 static __hwloc_inline hwloc_obj_t
01161 hwloc_get_next_obj_by_depth (hwloc_topology_t topology, unsigned depth, hwloc_obj_t prev);
01162
01169 static __hwloc_inline hwloc_obj_t
01170 hwloc_get_next_obj_by_type (hwloc_topology_t topology, hwloc_obj_type_t type,
01171 hwloc_obj_t prev);
01172
01182 HWLOC_DECLSPEC const char * hwloc_obj_type_string (hwloc_obj_type_t type) __hwloc_attribute_const;
01183
01210 HWLOC_DECLSPEC int hwloc_obj_type_sscanf(const char *string,
01211 hwloc_obj_type_t *typep,
01212 int *depthattrp,
01213 void *typeattrp, size_t typeattrsize);
01214
01225 HWLOC_DECLSPEC int hwloc_obj_type_snprintf(char * __hwloc_restrict string, size_t size, hwloc_obj_t obj,
01226 int verbose);
01227
01239 HWLOC_DECLSPEC int hwloc_obj_attr_snprintf(char * __hwloc_restrict string, size_t size, hwloc_obj_t obj, const char * __hwloc_restrict separator,
01240 int verbose);
01241
01249 HWLOC_DECLSPEC int hwloc_obj_cpuset_snprintf(char * __hwloc_restrict str, size_t size, size_t nobj, const hwloc_obj_t * __hwloc_restrict objs);
01250
01257 static __hwloc_inline const char *
01258 hwloc_obj_get_info_by_name(hwloc_obj_t obj, const char *name) __hwloc_attribute_pure;
01259
01274 HWLOC_DECLSPEC void hwloc_obj_add_info(hwloc_obj_t obj, const char *name, const char *value);
01275
01333 typedef enum {
01336 HWLOC_CPUBIND_PROCESS = (1<<0),
01337
01340 HWLOC_CPUBIND_THREAD = (1<<1),
01341
01365 HWLOC_CPUBIND_STRICT = (1<<2),
01366
01382 HWLOC_CPUBIND_NOMEMBIND = (1<<3)
01383 } hwloc_cpubind_flags_t;
01384
01390 HWLOC_DECLSPEC int hwloc_set_cpubind(hwloc_topology_t topology, hwloc_const_cpuset_t set, int flags);
01391
01397 HWLOC_DECLSPEC int hwloc_get_cpubind(hwloc_topology_t topology, hwloc_cpuset_t set, int flags);
01398
01410 HWLOC_DECLSPEC int hwloc_set_proc_cpubind(hwloc_topology_t topology, hwloc_pid_t pid, hwloc_const_cpuset_t set, int flags);
01411
01423 HWLOC_DECLSPEC int hwloc_get_proc_cpubind(hwloc_topology_t topology, hwloc_pid_t pid, hwloc_cpuset_t set, int flags);
01424
01425 #ifdef hwloc_thread_t
01426
01433 HWLOC_DECLSPEC int hwloc_set_thread_cpubind(hwloc_topology_t topology, hwloc_thread_t thread, hwloc_const_cpuset_t set, int flags);
01434 #endif
01435
01436 #ifdef hwloc_thread_t
01437
01444 HWLOC_DECLSPEC int hwloc_get_thread_cpubind(hwloc_topology_t topology, hwloc_thread_t thread, hwloc_cpuset_t set, int flags);
01445 #endif
01446
01460 HWLOC_DECLSPEC int hwloc_get_last_cpu_location(hwloc_topology_t topology, hwloc_cpuset_t set, int flags);
01461
01478 HWLOC_DECLSPEC int hwloc_get_proc_last_cpu_location(hwloc_topology_t topology, hwloc_pid_t pid, hwloc_cpuset_t set, int flags);
01479
01547 typedef enum {
01550 HWLOC_MEMBIND_DEFAULT = 0,
01551
01560 HWLOC_MEMBIND_FIRSTTOUCH = 1,
01561
01564 HWLOC_MEMBIND_BIND = 2,
01565
01573 HWLOC_MEMBIND_INTERLEAVE = 3,
01574
01586 HWLOC_MEMBIND_REPLICATE = 4,
01587
01593 HWLOC_MEMBIND_NEXTTOUCH = 5,
01594
01599 HWLOC_MEMBIND_MIXED = -1
01600 } hwloc_membind_policy_t;
01601
01613 typedef enum {
01618 HWLOC_MEMBIND_PROCESS = (1<<0),
01619
01623 HWLOC_MEMBIND_THREAD = (1<<1),
01624
01631 HWLOC_MEMBIND_STRICT = (1<<2),
01632
01637 HWLOC_MEMBIND_MIGRATE = (1<<3),
01638
01650 HWLOC_MEMBIND_NOCPUBIND = (1<<4)
01651 } hwloc_membind_flags_t;
01652
01665 HWLOC_DECLSPEC int hwloc_set_membind_nodeset(hwloc_topology_t topology, hwloc_const_nodeset_t nodeset, hwloc_membind_policy_t policy, int flags);
01666
01680 HWLOC_DECLSPEC int hwloc_set_membind(hwloc_topology_t topology, hwloc_const_cpuset_t cpuset, hwloc_membind_policy_t policy, int flags);
01681
01722 HWLOC_DECLSPEC int hwloc_get_membind_nodeset(hwloc_topology_t topology, hwloc_nodeset_t nodeset, hwloc_membind_policy_t * policy, int flags);
01723
01769 HWLOC_DECLSPEC int hwloc_get_membind(hwloc_topology_t topology, hwloc_cpuset_t cpuset, hwloc_membind_policy_t * policy, int flags);
01770
01780 HWLOC_DECLSPEC int hwloc_set_proc_membind_nodeset(hwloc_topology_t topology, hwloc_pid_t pid, hwloc_const_nodeset_t nodeset, hwloc_membind_policy_t policy, int flags);
01781
01791 HWLOC_DECLSPEC int hwloc_set_proc_membind(hwloc_topology_t topology, hwloc_pid_t pid, hwloc_const_cpuset_t cpuset, hwloc_membind_policy_t policy, int flags);
01792
01829 HWLOC_DECLSPEC int hwloc_get_proc_membind_nodeset(hwloc_topology_t topology, hwloc_pid_t pid, hwloc_nodeset_t nodeset, hwloc_membind_policy_t * policy, int flags);
01830
01870 HWLOC_DECLSPEC int hwloc_get_proc_membind(hwloc_topology_t topology, hwloc_pid_t pid, hwloc_cpuset_t cpuset, hwloc_membind_policy_t * policy, int flags);
01871
01878 HWLOC_DECLSPEC int hwloc_set_area_membind_nodeset(hwloc_topology_t topology, const void *addr, size_t len, hwloc_const_nodeset_t nodeset, hwloc_membind_policy_t policy, int flags);
01879
01886 HWLOC_DECLSPEC int hwloc_set_area_membind(hwloc_topology_t topology, const void *addr, size_t len, hwloc_const_cpuset_t cpuset, hwloc_membind_policy_t policy, int flags);
01887
01910 HWLOC_DECLSPEC int hwloc_get_area_membind_nodeset(hwloc_topology_t topology, const void *addr, size_t len, hwloc_nodeset_t nodeset, hwloc_membind_policy_t * policy, int flags);
01911
01936 HWLOC_DECLSPEC int hwloc_get_area_membind(hwloc_topology_t topology, const void *addr, size_t len, hwloc_cpuset_t cpuset, hwloc_membind_policy_t * policy, int flags);
01937
01945 HWLOC_DECLSPEC void *hwloc_alloc(hwloc_topology_t topology, size_t len);
01946
01956 HWLOC_DECLSPEC void *hwloc_alloc_membind_nodeset(hwloc_topology_t topology, size_t len, hwloc_const_nodeset_t nodeset, hwloc_membind_policy_t policy, int flags) __hwloc_attribute_malloc;
01957
01967 HWLOC_DECLSPEC void *hwloc_alloc_membind(hwloc_topology_t topology, size_t len, hwloc_const_cpuset_t cpuset, hwloc_membind_policy_t policy, int flags) __hwloc_attribute_malloc;
01968
01975 static __hwloc_inline void *
01976 hwloc_alloc_membind_policy_nodeset(hwloc_topology_t topology, size_t len, hwloc_const_nodeset_t nodeset, hwloc_membind_policy_t policy, int flags) __hwloc_attribute_malloc;
01977
01982 static __hwloc_inline void *
01983 hwloc_alloc_membind_policy(hwloc_topology_t topology, size_t len, hwloc_const_cpuset_t set, hwloc_membind_policy_t policy, int flags) __hwloc_attribute_malloc;
01984
01988 HWLOC_DECLSPEC int hwloc_free(hwloc_topology_t topology, void *addr, size_t len);
01989
02012 HWLOC_DECLSPEC hwloc_obj_t hwloc_topology_insert_misc_object_by_cpuset(hwloc_topology_t topology, hwloc_const_cpuset_t cpuset, const char *name);
02013
02029 HWLOC_DECLSPEC hwloc_obj_t hwloc_topology_insert_misc_object_by_parent(hwloc_topology_t topology, hwloc_obj_t parent, const char *name);
02030
02032 enum hwloc_restrict_flags_e {
02037 HWLOC_RESTRICT_FLAG_ADAPT_DISTANCES = (1<<0),
02038
02043 HWLOC_RESTRICT_FLAG_ADAPT_MISC = (1<<1),
02044
02049 HWLOC_RESTRICT_FLAG_ADAPT_IO = (1<<2)
02050 };
02051
02073 HWLOC_DECLSPEC int hwloc_topology_restrict(hwloc_topology_t __hwloc_restrict topology, hwloc_const_cpuset_t cpuset, unsigned long flags);
02074
02082 HWLOC_DECLSPEC int hwloc_topology_dup(hwloc_topology_t *newtopology, hwloc_topology_t oldtopology);
02083
02117 HWLOC_DECLSPEC int hwloc_custom_insert_topology(hwloc_topology_t newtopology, hwloc_obj_t newparent, hwloc_topology_t oldtopology, hwloc_obj_t oldroot);
02118
02140 HWLOC_DECLSPEC hwloc_obj_t hwloc_custom_insert_group_object_by_parent(hwloc_topology_t topology, hwloc_obj_t parent, int groupdepth);
02141
02165 HWLOC_DECLSPEC int hwloc_topology_export_xml(hwloc_topology_t topology, const char *xmlpath);
02166
02183 HWLOC_DECLSPEC int hwloc_topology_export_xmlbuffer(hwloc_topology_t topology, char **xmlbuffer, int *buflen);
02184
02186 HWLOC_DECLSPEC void hwloc_free_xmlbuffer(hwloc_topology_t topology, char *xmlbuffer);
02187
02204 HWLOC_DECLSPEC void hwloc_topology_set_userdata_export_callback(hwloc_topology_t topology,
02205 void (*export_cb)(void *reserved, hwloc_topology_t topology, hwloc_obj_t obj));
02206
02232 HWLOC_DECLSPEC int hwloc_export_obj_userdata(void *reserved, hwloc_topology_t topology, hwloc_obj_t obj, const char *name, const void *buffer, size_t length);
02233
02247 HWLOC_DECLSPEC int hwloc_export_obj_userdata_base64(void *reserved, hwloc_topology_t topology, hwloc_obj_t obj, const char *name, const void *buffer, size_t length);
02248
02269 HWLOC_DECLSPEC void hwloc_topology_set_userdata_import_callback(hwloc_topology_t topology,
02270 void (*import_cb)(hwloc_topology_t topology, hwloc_obj_t obj, const char *name, const void *buffer, size_t length));
02271
02276 #ifdef __cplusplus
02277 }
02278 #endif
02279
02280
02281
02282 #include <hwloc/helper.h>
02283
02284
02285 #include <hwloc/inlines.h>
02286
02287
02288 #include <hwloc/diff.h>
02289
02290
02291 #include <hwloc/deprecated.h>
02292
02293 #endif