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

Kla*_*aim 28 c++ parallel-processing comparison tbb ppl

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

因为我只是想要原型,我正在考虑只在Windows上"玩",然后有足够的知识在所有兼容平台上使用该库.

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

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

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

那么,如果有的话,这些差异是什么?我应该直接与去年稳定该局启动或者是低风险的原型与微软PPL只是玩,跨平台的"真实"的项目上使用该局?

Ale*_*nov 28

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

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

理论上,要从PPL切换到TBB,您只需要替换从ppl.h(带有TBB,标头进入<tbbdir>/include/tbb/compat)的路径,当然还要链接TBB DLL.但是在这种情况下,您将仅限于PPL API.要使用"额外" TBB API中不存在PPL(如parallel_pipeline,parallel_reduce,concurrent_priority_queue等),你需要从一开始就与TBB工作.

  • @ Nik-Lz,多年来,我们没有看到对TBB和PPL之间的源代码兼容性有明显的需求。在TBB方面,我们保持源代码与以前的库版本兼容,也许与旧版本的PPL也兼容。但是我们没有关注PPL的开发,因此在TBB中可能没有添加新功能。同时,TBB中扩展了许多“通用”类/功能,例如,以支持C ++ move语义。我认为现在TBB和PPL是两个具有足够有限通用API子集的线程库。 (2认同)