Open MPI logo

Hardware Locality Development Mailing List Archives

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

Subject: Re: [hwloc-devel] #23: network topology support and v1.0 semanticfixes
From: Samuel Thibault (samuel.thibault_at_[hidden])
Date: 2010-01-11 11:12:56

Jeff Squyres, le Mon 11 Jan 2010 10:12:00 -0500, a écrit :
> Been mulling this for a few days; here's my thoughts...


> Are you thinking of adding bandwidth attributes?

When the information is available through some way (be it by hand), yes.

> Or are you thinking of adding weighting between objects in the hierarchy? Or ...?

I'd tend to think that this would be an upper layer that applications
would compute themselves, according to their needs.

> More generally -- some objects can be bound to, some cannot.
> How does this kind of thing extend to, say, co-processors (such as accelerators, FPGAs, GPGPUs, etc.)?

I once thought about adding gpuset, maybe, but since the kinds of
objects will probably vary a lot, maybe it's better to not try to be
smart and let layers above handle it, only possibly provide for each
kind the OS number (e.g. CUDA device number).

> > - This also means there can't be "global" cpusets like the recently
> > added hwloc_topology_get_{topology,complete,online,allowed}_cpuset
> > functions (not released yet). These can just be moved to the hwloc_obj
> > structure, thus being available for each object, which could actually be
> > helpful btw.
> I'm not sure I follow -- you say that we can't have "global" cpusets anymore (which I grok), but then you say that we can move them to the hwloc_obj struct. Isn't that the top-level struct?

No, the hwloc_obj struct is the type of the nodes of the tree. A cpuset
makes sense at that place, and possibly also upper in the tree, until
you get up to a machine level, the last level where cpuset != NULL.
After that you have several machines and cpusets don't make sense any

> > - Helpers that take cpuset parameters of course don't make sense any more
> > when applied to networked topologies. But it probably doesn't make
> > sense for the caller to call them in the first place, and the caller
> > knows it since it's the caller that has first called the combining
> > operation or loaded an XML file resulting from it.
> Agreed. Perhaps we should have a general query function that can return whether a given object can be bound to or not (e.g., for generic tree-traversal kinds of functionality)...?

Well, to be "bound to" here would mean for a thread, i.e. to be bound
to a CPU set. So testing for cpuset != NULL should be enough. As said
above, I'm not sure we necessarily want to extend that notion since
the various kinds of "binding something to" becomes numerous. In CUDA
for instance, it doesn't make sense to bind something to some GPU,
you rather need a GPU number on which you want to start a particular
computation kernel.

> 1. How about defining a small set of generic operations based on what you described above? E.g.:


> - copy, remove, insert

Agreed, and can be done later, I think keeping that in mind is
sufficient for now.

> > The plan I see is that for 1.0 we only check that catenating .XML files
> > by hand to build misc levels representing network layers does indeed
> > work, which should mean that actual combining functions etc. should be
> > possible to implement later.
> FWIW, I'd prefer to see the combining/etc. functions ASAP -- we could definitely use such things in Open MPI...

Mmm, doing it in the API is not so trivial, for 1.0 I'd rather just
provide a small xml combiner (just a matter of tail/head/cat), which may
be enough for a start. But if you need it at the API level, we can add
it to the 1.0 milestone.