英特尔TBB和微软PPL有什么区别?

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

因为我现在只想创建原型,所以我只想在Windows上“玩”,然后有足够的知识在所有兼容的平台上使用该库。

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

一些消息来源建议,包括TBB的团队博客,他们一起构建它,并且它是同一个图书馆。

然而,它并不十分明确,因为通常认为两个库之间存在细微差别。

那么,如果有什么区别呢? 我应该直接从最后一个稳定的ITBB开始,还是仅仅在原型中使用Microsoft PPL并在跨平台的“真实”项目中使用ITBB的风险较低?


TBB是PPL的超集(与VS2010中一样),所以它提供了PPL所没有的所有PPL API和自己的API。

请注意,VS2010中的namespace Concurrency还包含并发运行时(ConcRT,其上建立了PPL),异步代理等的API。尽管它有一些(例如critical_section ),但TBB并没有大部分。 作为异步代理的替代方案,最新版本的TBB具有新的流程图API。

理论上,要从PPL切换到TBB,只需要从ppl.h(带有TBB,头文件在<tbbdir>/include/tbb/compat )中替换一个路径,当然也需要与TBB DLL链接。 但是在这种情况下,您将仅限于PPL API。 要使用PPL中不存在的“额外”TBB API(例如parallel_pipelineparallel_reduceconcurrent_priority_queue和其他),您需要从一开始就使用TBB。

链接地址: http://www.djcxy.com/p/64515.html

上一篇: What are the differences between Intel TBB and Microsoft PPL?

下一篇: Multithreading vs multiprocessing