我打算开始为一个跨平台项目“玩”基于任务的并行性。我想使用英特尔线程构建模块。我从Windows和Visual Studio开始。
由于我现在只想要原型,我正在考虑只在Windows上“玩”,然后有足够的知识在所有兼容平台上使用该库。
我了解到自VS2010以来,Microsoft提供了一个类似的库,并行处理库,它具有(几乎)与英特尔TBB相同的接口。
有些消息来源建议,包括TBB的团队博客,他们一起构建它并且它是相同的库。
然而,它并不是真正明确的,因为它经常表明两个库之间存在细微差别。
那么,这些差异是什么呢?我应该直接从最后一个稳定的ITBB开始,还是只能在原型中使用Microsoft PPL并在跨平台上使用ITBB是低风险的“真正的”项目?
答案 0 :(得分:27)
TBB是PPL的超集(如在VS2010中),因此它提供了所有PPL API以及PPL没有的自己的API。
请注意,VS2010中的namespace Concurrency
还包含并发运行时的API(ConcRT,其上构建了PPL),异步代理等.TBB没有大部分内容,尽管它有一些(例如{ {1}})。作为异步代理的替代方案,最新版本的TBB具有the new flow graph API。
理论上,要从PPL切换到TBB,您只需要替换ppl.h所在的路径(使用TBB,标头来自critical_section
),当然还要链接TBB DLL。但是在这种情况下,您将仅限于PPL API。要使用PPL中不存在的“额外”TBB API(例如<tbbdir>/include/tbb/compat
,parallel_pipeline
,parallel_reduce
等),您需要从一开始就使用TBB。< / p>