Thank you Sean,
I try to explain better what I need. Please also find some comments
inline with your reply.
Assume a single process P which needs to communicate with two other
processes PA and PB over two different channels A and B.
In TCP terms, this can be done by using two sockets in P, both at IP
hostP but each bound to a specific TCP port (hostP:portA and
hostP:portB) etc.
Mapping it to libfabric, I would create two endpoints from P but I don't
know how to realize the behavior of communicating with two different
peers over the two endpoints. Is there some way to "bind" an endpoint to
a host:port pair?
Re-posting to ofiwg mail list, as this is more of a developer question.
Hi all,
I am from the alpha group [http://alpha.di.unito.it/] (CS dept. @ Univ. of
Torino, Italy).
We just started to integrate libfabric into FastFlow [link], on the track
of the great job by Paolo Inaudi with the A3Cube provider.
After several readings of all the man pages and some online tutorials, I
still cannot understand how to work with contexts, domains and endpoints.
I'm not sure what you're referring to exactly by context. In the
documentation, a context is probably easiest to think of a command queue or
work queue. In the simplest case, an endpoint has 2 contexts -- one for
sending and another for receiving.
Note that we use the term context rather than queue because there's no
guarantee that work that has been posted to an endpoint completes in order.
Sorry I made some confusion with terminology here. I was talking about
the hierarchy from [http://www.slideshare.net/seanhefty/ofi-overview]:
- Fabric domain (fi_getinfo)
- domain (fi_domain)
- endpoint (fi_endpoint)
Here I don't know how to obtain the two endpoints I need: I need to
obtain different fi_info structures (by two different calls to
fi_getinfo with same IP address and different TCP ports) but I want them
to share the same domain. The domain itself comes from a preliminary
fi_getinfo call which is "agnostic" with respect to addresses.
I try to illustrate the problem:
1) single process attached to NIC with address X
2) two connection-less endpoints A and B
3) endpoint A should accept data from X:portA, while B from X:portB
If I try to map the hierarchy proposed in the libfabric "object model" I
would instantiate one context, one domain and both endpoints (and
respective queues) to that single domain. In this setting, I cannot find
how to specify the different ports for the endpoints. Actually I just need
to ensure endpoint A will find only messages sent to portA in its
completion queue, but I cannot figure out how to do it.
It sounds like you need different addresses for the two ports. Then assign
address A from port A to endpoint A, and address B from port B to endpoint B.
An example from IP land would be to assign port A address 192.168.1.1 and port
B 192.168.2.1. Endpoint A would have address 192.168.1.1:12345, and B address
192.168.2.1:12345. The '12345' in this example are transport (e.g. UDP or TCP
port) numbers.
As I said, I need two different TCP ports on the same IP host.
I hope I was a bit more clear now.
Thank you again :)
M.
Conversely, all the examples I saw (e.g. fabtests benchmarks) use a single
endpoint per process and the libfabric context is initialized with hints
and arguments specific to the endpoint. This means I should prefer to
instantiate one domain (and one context) for each endpoint?
If you have a single NIC, a single domain should be sufficient.
- Sean
--
Maurizio Drocco
PhD Student
University of Torino, department of Computer Science
Via Pessinetto 12, 10149 Torino - Italy
_______________________________________________
ofiwg mailing list
[email protected]
http://lists.openfabrics.org/mailman/listinfo/ofiwg