Server IP : 80.87.202.40 / Your IP : 216.73.216.169 Web Server : Apache System : Linux rospirotorg.ru 5.14.0-539.el9.x86_64 #1 SMP PREEMPT_DYNAMIC Thu Dec 5 22:26:13 UTC 2024 x86_64 User : bitrix ( 600) PHP Version : 8.2.27 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : ON Directory : /usr/share/doc/hwloc/examples/ |
Upload File : |
/* This example program looks for caches shared between this process * and another one based on their current binding. * * Copyright © 2014-2018 Inria. All rights reserved. * See COPYING in top-level directory. */ #include "hwloc.h" #include <errno.h> #include <stdio.h> #include <string.h> #ifdef HAVE_UNISTD_H #include <unistd.h> #endif int main(int argc, char *argv[]) { pid_t hispid; hwloc_topology_t topology; hwloc_bitmap_t set, hisset; hwloc_obj_t obj; int err; /* find the pid of the other process, otherwise use my own pid */ if (argc >= 2) { hispid = atoi(argv[1]); } else { hispid = getpid(); } /* create a topology with instruction caches enables */ err = hwloc_topology_init(&topology); if (err < 0) { fprintf(stderr, "failed to initialize the topology\n"); return EXIT_FAILURE; } hwloc_topology_set_icache_types_filter(topology, HWLOC_TYPE_FILTER_KEEP_ALL); err = hwloc_topology_load(topology); if (err < 0) { fprintf(stderr, "failed to load the topology\n"); hwloc_topology_destroy(topology); return EXIT_FAILURE; } /* find where I am running */ set = hwloc_bitmap_alloc(); if (!set) { fprintf(stderr, "failed to allocate my bitmap\n"); hwloc_topology_destroy(topology); return EXIT_FAILURE; } err = hwloc_get_cpubind(topology, set, 0); if (err < 0) { fprintf(stderr, "failed to get my binding\n"); hwloc_bitmap_free(set); hwloc_topology_destroy(topology); return EXIT_FAILURE; } /* find where the other process is running */ hisset = hwloc_bitmap_alloc(); if (!hisset) { fprintf(stderr, "failed to allocate his bitmap\n"); hwloc_bitmap_free(set); hwloc_topology_destroy(topology); return EXIT_FAILURE; } /* FIXME: on windows, hispid should be replaced with OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, hispid); */ err = hwloc_get_proc_cpubind(topology, hispid, hisset, 0); if (err < 0) { fprintf(stderr, "failed to get his binding\n"); hwloc_bitmap_free(hisset); hwloc_bitmap_free(set); hwloc_topology_destroy(topology); return EXIT_FAILURE; } /* merge both process binding into mine */ hwloc_bitmap_or(set, set, hisset); /* find the smallest object covering this set */ obj = hwloc_get_obj_covering_cpuset(topology, set); /* display parents of type cache */ while (obj) { if (hwloc_obj_type_is_cache(obj->type)) { char type[64]; char attr[64]; hwloc_obj_type_snprintf(type, sizeof(type), obj, 0); hwloc_obj_attr_snprintf(attr, sizeof(attr), obj, ", ", 0); printf("Found object %s with attributes %s\n", type, attr); } /* next parent up in the tree */ obj = obj->parent; } hwloc_bitmap_free(hisset); hwloc_bitmap_free(set); hwloc_topology_destroy(topology); return EXIT_SUCCESS; }