Samuel Thibault wrote:
> bgog...@osl.iu.edu, le Wed 11 Nov 2009 11:33:31 -0500, a écrit :
>   
>> +/** \brief Bind thread given by \p pid to CPU set \p cpuset.
>> + *
>> + * \note This function now manipulates hwloc cpusets.
>> + */
>> +static __inline int
>> +hwloc_plpa_sched_setaffinity(hwloc_topology_t topology, hwloc_pid_t pid, 
>> hwloc_cpuset_t cpuset)
>> +{
>> +  /* FIXME: should be set_thread_cpubind with a pid */
>> +  return hwloc_set_proc_cpubind(topology, pid, cpuset, 0);
>> +}
>>     
>
> That's one instance where the Linux interface is odd (it talks about a
> pid, but it's actually a thread, and there is no way to set the affinity
> mask of a whole process...) and I believe we shouldn't try to support
> all the cases.  I'd suggest to bind a thread only when pid is 0.  If
> pid is not zero, that means that either the application is calling the
> linux-only gettid() or some other linux-only way to get the tid of a
> specific thread, or it assumes that the target is a single-threaded
> process and thus providing the pid of that process is enough to change
> its cpu affinity.  In that case we can use hwloc_set_proc_cpubind like
> already done above.  Same for getaffinity.
>   

The problem is that our hwloc/Linux does not implement
set_proc_cpubind() so far. That's why PLPA/hwloc reports that binding is
not supported.

What about we add set_proc_cpubind() support to Linux and:
* document in hwloc.h that it may bind a single thread if the
application (wrongly) passes a tid
* document that hwloc_plpa_sched_setaffinity now works on processes
instead of pids and that application should use thread_t and
set_thread_cpubind for local threads
* maybe return -ENOSYS on Linux if STRICT is given?

Brice

Reply via email to