Yes, this helps. However, I complete my second question : is there a way to force my current process to run on 'n' cores ? For example : I have 20 cores for real in my architecture (I'm dreaming ...), but I wish that my process run on only 5 cores. Is it possible with hwloc ?
Essayez avec cette orthographe : je completerai ma *deuxième* Saisissez du texte, l'adresse d'un site Web ou importez un document à traduire. <http://translate.google.fr/?tr=f&hl=fr> Annuler <http://translate.google.fr/?tr=t&hl=fr> Écouter Lire phonétiquement Thanks for your help. Guillaume 2011/1/28 Brice Goglin <brice.gog...@inria.fr> > Le 28/01/2011 15:32, guillaume Arnal a écrit : > > Hi everyone, > > > > I'm beginner in using hwloc and I have some questions. > > > > First: I'm looking for a way to find which core is using by the > > current thread. (maybe with hwloc_get_thread_cpubind ??) > > > > Second: is there a way to set the number of core usable for the > > current process ? > > > > Thank you in advance for your help. > > Guillaume Arnal > > Hello, > > First, are you talking about cores for real (one core that may contain > multiple hyperthread), or are physical processors ok (those that you see > in /proc/cpuinfo) ? > > hwloc_get_thread_cpubind() returns the binding of a thread specified by > its Linux thread id number. For the current thread, you may also use > hwloc_get_cpubind() with flag HWLOC_CPUBIND_THREAD. Both give a cpuset > listing all physical processors where the thread is currently allowed to > run. Processes are not bound by default, so the cpuset would contain all > existing processors, even if your thread actually uses a single core. > > hwloc_cpuset_t cpuset = hwloc_bitmap_alloc(); > hwloc_get_cpubind(topology, cpuset, HWLOC_CPUBIND_THREAD); > > > Once you have a cpuset, you may get the corresponding cores with: > > hwloc_obj_t prev = NULL; > while ((prev = hwloc_get_next_obj_inside_cpuset_by_type(topology, cpuset, > HWLOC_OBJ_CORE, prev)) != NULL) > /* do what you want with object core */ > > > If the thread is bound to a single physical processors, you can get its > physical id with: > > hwloc_bitmap_first(cpuset); > > > If you want to force your current process to run on the 3rd core, you > can do something like: > > hwloc_obj_t core = hwloc_get_obj_by_type(topology, HWLOC_OBJ_CORE, 2); > hwloc_set_cpubind(topology, core->cpuset, HWLOC_CPUBIND_PROCESS); > > > Hope this helps, > Brice > > _______________________________________________ > hwloc-users mailing list > hwloc-us...@open-mpi.org > http://www.open-mpi.org/mailman/listinfo.cgi/hwloc-users >