英特尔TBB和微软PPL有什么不同?
What are the differences between Intel TBB and Microsoft PPL?
我计划开始"玩"一个跨平台项目的基于任务的并行性。我想使用英特尔线程构建块。我从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。
- 为不同配置设置MSVC_RUNTIME_LIBRARY的正确方法是什么
- 警告处理为错误这里有什么问题
- 什么时候调用组成单元对象的析构函数
- #定义c-预处理器常量..我做错了什么
- 努力将整数转换为链表。不知道我在这里做错了什么
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 什么时候在C++中返回常量引用是个好主意
- 当在同一名称空间中有两个具有相同签名的函数时,会发生什么
- C++避免重复声明的语法是什么
- c++库的公共头文件中应该包含什么
- 问题:什么是QAbstractItemView::NoEditTriggers的反面
- 有什么方法可以遍历结构吗
- 当类在C++中定义时,有什么方法可以"register"类吗?
- ifstream什么都没读
- 在C++中,将大的无符号浮点数四舍五入为整数的最佳方法是什么
- 实现无开销push_back的最佳方法是什么
- C++从另一个类访问公共静态向量的正确方法是什么
- "throw expression code" 1e7 >返回 d 是什么?投掷标准::overflow_error( "too big" ) : d;意味 着?
- 在PPL任务中进行构造的目的是什么?
- 英特尔TBB和微软PPL有什么不同?