Open MPI logo

Hardware Locality Users' Mailing List Archives

  |   Home   |   Support   |   FAQ   |   all Hardware Locality Users mailing list

Subject: Re: [hwloc-users] some questions about hwloc
From: guillaume Arnal (guillaume.arnal.35_at_[hidden])
Date: 2011-01-29 04:19:02


Wonderful !

Tank you very much everybody.
Guillaume

2011/1/28 Brice Goglin <Brice.Goglin_at_[hidden]>

> You have to choose 5 cores manually:
>
> /* get all my core objects */
> hwloc_obj_t core1 = hwloc_get_obj_by_type(topology, HWLOC_OBJ_CORE,
> <first_core_number>);
> hwloc_obj_t core2 = hwloc_get_obj_by_type(topology, HWLOC_OBJ_CORE,
> <second_core_number>);
> hwloc_obj_t core3 = hwloc_get_obj_by_type(topology, HWLOC_OBJ_CORE,
> <third_core_number>);
> hwloc_obj_t core4 = hwloc_get_obj_by_type(topology, HWLOC_OBJ_CORE,
> <fourth_core_number>);
> hwloc_obj_t core5 = hwloc_get_obj_by_type(topology, HWLOC_OBJ_CORE,
> <fifth_core_number>);
> /* allocate a cpuset and fill it */
> hwloc_cpuset set = hwloc_bitmap_alloc();
> hwloc_bitmap_or(set, set, core1->cpuset);
> hwloc_bitmap_or(set, set, core2->cpuset);
> hwloc_bitmap_or(set, set, core3->cpuset);
> hwloc_bitmap_or(set, set, core4->cpuset);
> hwloc_bitmap_or(set, set, core5->cpuset);
> /* bind the process */
> hwloc_set_cpubind(topology, set, HWLOC_CPUBIND_PROCESS);
> hwloc_bitmap_free(set);
>
>
> Use HWLOC_OBJ_PU instead of CORE if you want hardware thread instead of
> cores.
>
> Note that core_numbers above are logical numbers, not the physical numbers.
>
> Brice
>
>
>
>
> Le 28/01/2011 19:35, Jim Burnes a écrit :
> > Yes. There is a way to do that. You bind it to a cpuset.
> >
> > It will be easier if you know the set of cpu cores you want to bind
> > to, but I suppose you could dynamically alter the cpuset.
> >
> > I haven't tried that though.
> >
> >
> >
> > On Fri, Jan 28, 2011 at 11:33 AM, guillaume Arnal
> > <guillaume.arnal.35_at_[hidden]> wrote:
> >
> >> 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.
> >> Annuler
> >> Écouter
> >> Lire phonétiquement
> >> Thanks for your help.
> >> Guillaume
> >>
> >> 2011/1/28 Brice Goglin <Brice.Goglin_at_[hidden]>
> >>
> >>> 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-users_at_[hidden]
> >>> http://www.open-mpi.org/mailman/listinfo.cgi/hwloc-users
> >>>
> >>
> >> _______________________________________________
> >> hwloc-users mailing list
> >> hwloc-users_at_[hidden]
> >> http://www.open-mpi.org/mailman/listinfo.cgi/hwloc-users
> >>
> >>
> >>
> > _______________________________________________
> > hwloc-users mailing list
> > hwloc-users_at_[hidden]
> > http://www.open-mpi.org/mailman/listinfo.cgi/hwloc-users
> >
>
> _______________________________________________
> hwloc-users mailing list
> hwloc-users_at_[hidden]
> http://www.open-mpi.org/mailman/listinfo.cgi/hwloc-users
>