29

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

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

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

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

然而,它并不是很明确,因为经常有人建议这两个库之间存在细微差别。

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

4

1 回答 1

30

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

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

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

于 2011-09-23T10:21:57.220 回答