您的位置:首页 > 产品设计 > UI/UE

Intel Threading Building Blocks

2007-11-11 20:27 465 查看
之前说准备写点TBB的内容,就先做个简介吧:

TBB,Threading Building Blocks,是Intel推出的针对多线程并行开发的一个library,open source,遵循GPLv2,官方网址:http://threadingbuildingblocks.org/,Intel的网站在:http://www.intel.com/software/products/tbb

TBB 获得过 17 届 Jolt Productivity Awards,是一套 C++ 模板库,和直接利用 OS API 写程序的 raw thread 比,在并行编程方面提供了适当的抽象,当然还包括更多其他内容,比如 task 概念,常用算法的成熟实现,自动负载均衡特性还有不绑定 CPU 数量的灵活的可扩展性等等。

TBB可以在Windows,Linux和MacX上运行,支持Intel C++、VC 7/8和gcc编译器,这都是由它的特性决定的,因为它不是对现有语言的扩展(不像OpenMP),而是在现有语言基础上对并行开发概念的封装和实现,底层依然依赖与raw thread的支持。

关于raw thread/OpenMP/TBB有个简单的比较:

1、raw thread最大的问题就在于不可移植和开发难度,ACE等已经做了很多尝试想通过wrapper的方式解决移植性问题,但并不能解决开发难度的问题(而且移植性是否真的很好的解决了也由不同的声音);但raw thread最大的好处当然是其灵活性啦,利用windows thread或者pthread实现复杂的线程同步和并发曾经是guru们炫耀的技能之一^_^

2、OpenMP,嗯,个人来看,确实也是个不错的东西,它支持不同平台,不同编译器(目前c/c++,fortran),但OpenMP更多的适合于flat do-loop centric parallelism,另外,用惯了C++的人曾经有过调侃:OpenMP is great if you have Fortran code, or C code that looks like Fortran, or C++ that looks like Fortran^_^ OpenMP的代码确实很flat,而且,代码里一堆的#pragma似乎也不满足C++ developer的审美习惯

3、OK,这样就直到TBB确实就是for C++ developer准备的了,它没有其它语言的support,而且基于task概念的封装会使并行更易于理解,当然前提是你先学会TBB^_^ 当然,generic programming的style会让很多C++ fans喜欢,open source更是可以读读,看看别人是怎样把raw thread变成抽象层的概念的~~~

这是Intel给出的TBB/OpenMP/Raw thread的比较,权作参考:

Capabilities Comparison

Intel® TBB
OpenMP
Threads
Task level parallelism
+
+
-
Data decomposition support
+
+
-
Complex parallel patterns (non-loops)
+
-
-
Broadly applicable generic parallel patterns
+
-
-
Scalable nested parallelism support
+
-
-
Built-in load balancing
+
+
-
Affinity support
-
+
+
Static scheduling
-
+
-
Concurrent data structures
+
-
-
Scalable memory allocator
+
-
-
I/O dominated tasks
-
-
+
User-level synchronization primitives
+
+
-
Compiler support is not required
+
-
+
Cross OS support
+
+
-
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: