`channel` will definitely do the trick.
I just realized that I actually don't need the in-order semantics of an
actual queue. I was just thinking about a queue because the previous
(parallel, but not distributed) implementation of the code on which I
am working now was using a `tbb::concurrent_queue`, so it seemed to me
to be a good starting point.
But `channel` is actually a better solution for my use case.
Thanks a lot for your help !
On Thu, 2017-08-24 at 07:20 -0500, Hartmut Kaiser wrote:
> Jean-Loup,
>
> > I am currently looking for a data structure that basically behaves
> > like
> > TBB's `concurrent_queue<T>`, except for the `pop()` operation which
> > would
> > return a `hpx::future<T>`, and would never fail. This way, `get()`-
> > ting
> > the result would suspend the thread until the `pop()` has succeeded
> > (possibly never if the queue remains empty). Such a queue would be
> > very
> > useful to manage tasks awaiting computing resources such as
> > preallocated
> > memory buffers or CUDA streams.
> >
> > hpx::lcos::local::channel is exactly what you need.
>
> Well, channel is actually more than a concurrent queue. It currently
> allows for out-of-order insertion/extraction of elements (it's
> essentially a concurrent map with an asynchronous interface). But
> Thomas is right, conceptually, channel exposes exactly the interface
> you're looking for and it should be possible to create a variation on
> the channel-theme based on a 'real' queue. This might give you better
> performance than the generic channel we have today.
>
> For the current channel implementation, please see [1], for an
> example see [2].
>
> HTH
> Regards Hartmut
> ---------------
> http://boost-spirit.com
> http://stellar.cct.lsu.edu
>
> [1] https://github.com/STEllAR-GROUP/hpx/blob/master/hpx/lcos/local/c
> hannel.hpp
> [2] https://github.com/STEllAR-GROUP/hpx/blob/master/examples/quickst
> art/local_channel.cpp
>
> >
> > In my specific use case, the queue would only need to be local, and
> > should
> > not be accessed from another locality (same NUMA domain should be
> > okay,
> > though). Moreover, I will only need T = unsigned int.
> >
> > I can certainly roll-out my own version of such a concurrent queue
> > if
> > needed, but I would prefer to avoid reinventing the square wheel if
> > something similar already exists :-)
> >
> > Is any of you aware of such a data structure or of a similar one ?
> > Thanks
> > in advance for your suggestions.
> >
> > Best regards,
> > Jean-Loup Tastet
> >
> > _______________________________________________
> > hpx-users mailing list
> > [email protected]
> > https://mail.cct.lsu.edu/mailman/listinfo/hpx-users
>
>
> _______________________________________________
> hpx-users mailing list
> [email protected]
> https://mail.cct.lsu.edu/mailman/listinfo/hpx-users
_______________________________________________
hpx-users mailing list
[email protected]
https://mail.cct.lsu.edu/mailman/listinfo/hpx-users