I have a C++ development project for which tbb::flow seems to be an ideal library or framework to use. But outside of Intel articles and papers I have not seen much or any usage of tbb::flow. This only bothers me because if tbb::flow is a good as it seems to be when reading about it, I would expect it to be more widely used or at least used a few projects. That I cannot find more/any usage of tbb::flow makes me worried. Is there something wrong with tbb::flow that projects do not use it? Is there some alternative that is more popular? (Not necessarily better but more popular?)
So my question is: what are good example projects that use tbb::flow? Please note that I am not trying to criticize tbb::flow or start an argument. I am just trying to find out where tbb::flow is used, so I can make a more informed decision about whether I should use tbb::flow.
I am sorry, but I think that we cannot disclose some of the TBB Flow Graph customers as I am not sure we have permission from them to do so. So, I can only post here what I was able to find in public:
- World of Tanks as it is indicated in the co-authored paper.
- Testimonials page at threadingbuildingblocks.org contains explicit mention of TBB Flow Graph component by Pacific Northwest National Laboratory
- "Driving Code Performance with Intel® advisor’s flow graph analyzer" from 30-th issue of Parallel Universe Magazine uses TBB Flow Graph for advanced driver assistance systems (ADAS).
Finally, many projects on github, including:
- https://github.com/WireCell/wire-cell-tbb a part of bigger framework https://wirecell.github.io/
use this component from TBB library.
You can also search for tbb/flow_graph.h and tbb/tbb.h (as it also includes flow_graph.h and users might just include the main TBB header for simplicity) in the projects on public code platforms.
Thanks for your response. I understand that your customer list is proprietary and you cannot share that. I am, however, hoping you can share a longer list of non-trivial open source projects that are using tbb::flow. What you found in public is similar to what I found--not much. The papers all have a link to Intel, and one of the github projects you mention, ProcesingFlow, is a one-off experiment that is not a good demonstration of why/how I should move to tbb::flow. And the skeptic in me does not put stock into a testimonial quote unless I see evidence. (We have all used technologies that at the time seemed to work great but break down after usage and are later abandoned.)
The second github project you mention, WireCell is a great and substantive example. But it is only one. What are other good examples of projects that use tbb::flow? (Note it is hard to find good examples because more of the search hits turn out to be from other projects including the tbb source code in their project. So most of the finds on github are redundant tbb examples.) In my search on github for projects using tbb::flow the most active that I found was https://github.com/cpp-taskflow/cpp-taskflow, which is a counter-example claiming to provide an improved alternative to tbb::flow.
So I am still looking for evidence that tbb::flow is an implementation choice that is actively used (outside of Intel). I realize that this is a somewhat specialized field and do not expect tbb::flow to be popular. I am, however, looking for a handful of projects to validate that using tbb::flow is the right path for my development team. With the growth in computer vision and deep learning, why is tbb::flow not being used in at least a few projects in those communities?
Thanks again for your time.
I understand your position. Indeed, it is always better to secure your choice.
For now for the closed source projects I can only say that there are customers of TBB flow graph among them. However, I don't think it would make any difference for you if I was able to get their approval to disclose that fact, would not it?
As far as open source software is concerned, I will get back to you once I have something to share.
From your question about it making a difference, I see I have not communicated well with this post. Knowing that N non-trivial software development efforts are using tbb::flow absolutely makes a difference to me--even if they are closed source, proprietary Intel clients. If they are ALL in that category, then my followup question is why is tbb::flow not used in the open source community? tbb (and tbb::flow) is open-source with a liberal license. It looks to provide a perfect solution for efficient scaling of a single process to multiple cores. Why is there not a handful of open source project using tbb::flow? So, yes, knowing that tbb::flow is used in products X, Y, and Z is very helpful. But if WireCell is the only substantive open source project using tbb::flow, then it makes me wonder why? And that makes me wonder what do I need to do and how much do I need to spend to get Intel's help so that my product can benefit from tbb::flow?
Let me know if you feel this conversation should be continued offline.
Sorry for delayed reply.
Please take a look at what I was able to find. The following does not have any particular order, merely an enumeration of more or less useful projects:
- https://github.com/FuzesiMate/ComputerVision and the project where it is used https://github.com/FTSRG/BME-MODES3
- https://github.com/jtlap/nt2 and, based on it, helper wrappers for R https://github.com/RcppCore/RcppNT2
- https://github.com/BenzzzX/ESL or https://github.com/BenzzzX/NESL
You can try looking yourself for other applications with this peculiar github query: https://github.com/search?l=C%2B%2B&q=%22tbb+flow%22+fork%3Atrue+NOT+Intel&type=Code
Hope this helps,