英特尔TBB和微软PPL有什么不同?

What are the differences between Intel TBB and Microsoft PPL?

本文关键字:什么 PPL TBB 微软 英特尔      更新时间:2023-10-16

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

因为我现在只想做原型,我想只在windows上"玩",然后有足够的知识在所有兼容的平台上使用这个库。

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

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

然而,这并不是很明确,因为它经常被认为两个库之间有细微的差异。

那么,如果有的话,这些区别是什么呢?我应该直接从最后一个稳定的ITBB开始,还是仅仅在原型中玩微软PPL,然后在跨平台的"真正的"项目中使用ITBB是低风险的?

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

注意,VS2010中的namespace Concurrency还包含并发运行时(ConcRT,在其之上构建PPL),异步代理等api。TBB虽然有一些(例如critical_section),但大部分都没有。作为异步代理的替代方案,最新版本的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。