英特尔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_pipeline
, parallel_reduce
, concurrent_priority_queue
和其他),您需要从一开始就使用TBB。
上一篇: What are the differences between Intel TBB and Microsoft PPL?