【问题标题】:What are the differences between Intel TBB and Microsoft PPL?英特尔 TBB 和微软 PPL 有什么区别?
【发布时间】:2013-05-21 02:00:05
【问题描述】:

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

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

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

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

但它并不是很明确,因为它经常暗示这两个库之间存在细微差别。

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

【问题讨论】:

  • 先用PPL再转TBB有什么好处?
  • 根据您的任务,也许 OpenMP 就足够了。例如,根据我的经验,它在图像处理方面表现更好。
  • @Alex:确实如此。图像处理是数据并行化的经典而简单的例子。 OP 谈到了基于任务的并行性。无论如何,OpenMP 要简单得多,因此无论如何都应该进行审查。
  • @AndyT:PPL 在我使用的 Visual Studio 2010 中自动可用 - 无需设置,只需包含和编码 - 我不必费心安装任何东西并为每个设置库原型(可以自动化但仍然很耗时 - 即使使用 CMake)。如果我可以在 PPL 中对某些东西进行原型制作,并确保它可以在不使用 ITBB 修改的情况下工作和编译,那么我可以直接从 PPL 开始并在实际项目中使用 ITBB——即跨平台。
  • @AlexFarber:题外话:我需要专门练习基于任务的并行化。我已经知道什么时候 OpenMP 就足够了。

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


【解决方案1】:

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

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

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

【讨论】:

  • 很好的答案,非常准确!现在我了解了这两个库周围的模糊信息:每次都有超集但仍然与其他内容有所不同,这让每个人都感到困惑。例如,参见 C 和 C++ ......无论如何,谢谢!我会从一开始就选择 TBB。
  • @Nik-Lz,多年来我们没有看到对 TBB 和 PPL 之间源代码兼容性的显着需求。在 TBB 方面,我们保持与以前的库版本的源代码兼容性,因此可能与旧版本的 PPL。但是我们没有关注 PPL 的开发,因此 TBB 中可能会遗漏一些新增内容。同时,许多“通用”类/函数在 TBB 中进行了扩展,例如支持 C++ 移动语义。我认为现在 TBB 和 PPL 是两个完全不同的线程库,具有有限的公共 API 子集。
猜你喜欢
  • 2013-10-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-31
  • 1970-01-01
  • 2023-03-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多