2010-06-12 52 views
3

QtConcurrent太棒了。提供QtConcurrent功能的通用C++库?

我会让Qt的文档不言自明:

QtConcurrent包括函数式编程风格的API进行并行处理名单,包括MapReduce和FilterReduce实现共享内存(非分布式)系统,以及在GUI应用程序中管理异步计算的类。

举例来说,你给QtConcurrent::map()可迭代序列,并接受存储序列中的类型的项目的功能,以及功能应用到集合中的所有项目。这是以多线程方式完成的,线程池等于系统上逻辑CPU的数量。

QtConcurrent还有很多其他的功能,比如filter(),filteredReduced()等。标准的CompSci map/reduce功能等等。

我完全爱上了这个,但我正在开始一个不会使用Qt框架的OSS项目。这是一个图书馆,我不想强​​迫别人依赖像Qt这样的大型框架。我试图将外部依赖关系降到最低(这是体面的事情)。

我正在寻找一种通用的C++框架,它提供了与QtConcurrent相同/相似的高级基元,并且可以与STL集合一起使用。 AFAIK boost没有像这样(虽然我可能是错的)。 boost::thread与我正在寻找的相比是非常低的水平(但是如果请求的库使用boost::thread进行低级别工作,那将很不错)。

我知道C#有一些与它们的并行扩展非常相似的东西,所以我知道这不是一个Qt唯一的想法。

你有什么建议我使用?

+0

QtConcurrent很酷。我调整了Mandelbrot示例以使用并行接口...可能会对你感兴趣:http://hostilefork.com/thinker-qt/ – HostileFork 2010-06-12 16:56:46

+0

@Hostile是的,QtConcurrent很酷。正如我所说,我一直在使用它。我只是在寻找类似于STL集合而没有Qt本身的东西。 – Lucas 2010-06-12 16:59:14

+0

我可能是错的,但我认为Qt的模块化意味着你必须使用最多只有QtCore和QtConcurrent(而不是“像Qt这样的大型框架”)? – codinguser 2010-06-12 20:20:22

回答

0

你能用Boost吗?我认为它并不像Qt那样具有很高的抽象层,但应该可以将其中一个作为Boost原语顶部的相当薄的外观(事实上,现有的一些add-ons已经可以提供您所需要的 - - 我不得不承认我对他们并不熟悉,这就是为什么我说“也许”;-)。

如果您发现现有的附加组件不合适,那么您的外观将是您自己贡献Boost Vault(或其他开放源代码回购)的极好附加组件,“回馈”一个有用的可重用的开放式附加组件,源贡献......我希望这激励,如果需要你做这项工作 - !)

+0

是的,我正在使用助推器。如果没有lib能够满足我的要求,我准备推出自己的产品。但我宁愿不。 – Lucas 2010-06-12 16:54:52

1

我听说过Intel's Threaded Building Blocks好东西,虽然我没有用它

由于2009年10月的,它不似乎没有专门的map-reduce。但是,人们已经表示了兴趣,并建议他们要拿出东西:

http://software.intel.com/en-us/forums/showthread.php?t=65053

“映射减少像一个过滤器,排序的简单结合的容貌,并减少,但它可能需要一些魔术让它变得高效“
+0

我看了一下TBB,很好。它没有map/reduce,但它确实有很多我不需要的东西:)。这似乎是矫枉过正恕我直言。 QtConcurrent总共提供了7个函数(+重载和阻塞变量),而TBB有范围,集合,算法,任务调度,时序,线程本地存储以及厨房接收器。 – Lucas 2010-06-12 17:29:28