英特尔TBB和Microsoft PEOPLE有什么区别?

时间:2011-09-22 12:58:21

标签: c++ parallel-processing comparison tbb ppl

我打算开始为一个跨平台项目“玩”基于任务的并行性。我想使用英特尔线程构建模块。我从Windows和Visual Studio开始。

由于我现在只想要原型,我正在考虑只在Windows上“玩”,然后有足够的知识在所有兼容平台上使用该库。

我了解到自VS2010以来,Microsoft提供了一个类似的库,并行处理库,它具有(几乎)与英特尔TBB相同的接口。

有些消息来源建议,包括TBB的团队博客,他们一起构建它并且它是相同的库。

然而,它并不是真正明确的,因为它经常表明两个库之间存在细微差别。

那么,这些差异是什么呢?我应该直接从最后一个稳定的ITBB开始,还是只能在原型中使用Microsoft PPL并在跨平台上使用ITBB是低风险的“真正的”项目?

1 个答案:

答案 0 :(得分:27)

TBBPPL的超集(如在VS2010中),因此它提供了所有PPL API以及PPL没有的自己的API。

请注意,VS2010中的namespace Concurrency还包含并发运行时的API(ConcRT,其上构建了PPL),异步代理等.TBB没有大部分内容,尽管它有一些(例如{ {1}})。作为异步代理的替代方案,最新版本的TBB具有the new flow graph API

理论上,要从PPL切换到TBB,您只需要替换ppl.h所在的路径(使用TBB,标头来自critical_section),当然还要链接TBB DLL。但是在这种情况下,您将仅限于PPL API。要使用PPL中不存在的“额外”TBB API(例如<tbbdir>/include/tbb/compatparallel_pipelineparallel_reduce等),您需要从一开始就使用TBB。< / p>