中文名

,线程构建模块
外文名

Thread Building Blocks
缩    写

TBB
开    发

intel
 

1线程构建模块编辑

TBB,Thread Building Blocks,线程构建模块,是Intel公司开发的并行编程开发的工具。
OSCON 上,Intel 宣布,Threading Building Blocks,Intel 众多软件开发工具中的一个,open source了。协议是 GPLv2。
TBB 获得过 17 届 Jolt Productivity Awards,是一套C++模板库,和直接利用 OSAPI写程序的 raw thread 比,在并行编程方面提供了适当的抽象,当然还包括更多其他内容,比如 task 概念,常用算法的成熟实现,自动负载均衡特性还有不绑定 CPU 数量的灵活的可扩展性等等。STL之父,Alexander Stepanov对此评价不错,他说“Threading Building Blocks… could become a basis for the concurrency dimension of the C++ standard library”。其他 TBB 的早期用户,包括Autodesk,Sun,Red Hat, Turbo Linux 等亦然。现在 O’Reilly 已经出版了一本 Intel Threading Building Blocks: Outfitting C++ for Multi-core Processor Parallelism。
TBB 可以在WindowsLinux和 OSX 上运行,支持 Intel, Microsoft 和GNU工具,这就覆盖了绝大多数需求范围。
Intel 内部大概在 2004 年有了 TBB 的概念,2005 年 team 成立,2006 年 8 月发布 1.0,今年 4 月 1.1,这个程序看上去势头不错。
和业界目前层出不穷的并行解决方法/方案比较,TBB 有自己的优势,例如:和 OpenMP 比…哦,他们几乎是两回事…关于 OpenMP 有个笑话:OpenMP is great if you have Fortran code, or C code that looks like Fortran, or C++ that looks like Fortran,或者说,一句话,flat do-loop centric parallelism。另外,如果你的项目不适合甚至不允许 pragma 来 prgma 去的,那就麻烦了。
目前 TBB 也仍然作为售价 $299 商业产品(包括了 Intel C++ Compiler Professional Editions 10.0)销售,因为有些用户更喜欢 Intel 的支持服务。一个不知道是好消息还是坏消息的信息是,如果我用 TBB 和 Intel Compiler 配合编写的程序,在 AMD 的 multicore 处理器上会有更好的 performance 吗?答案是,很多情况下,确实会提高的
对 TBB 或者说并行编程趋势的完整理解和支持只可能最先发生在工业界,这不是你在论坛上看到的某个蹩脚程序员或者业余爱好者愿意花精力或者有机会实践的东西,Autodesk,Sun 和 好莱坞 是典型的最渴望和最欢迎任何这方面的有益举动的厂商。DDJ 对 James Reinders 的访问,其中有一段,或许,有一天会扩展 TBB 到支持Java.Net吧。
Raw thread 几乎铁定不是最方便和具备可移植性的选择,某种程度的 wrapper 只能改良而无实质变化,TBB 引入 generic parallel programming 的支持是个大进步,当然这也不能说完美,TBB 有不方便的地方(有些来自 C++ 有些来自 TBB 实现),而且不一定适合某些特定问题域,所以GoogleSawzall(适合大规模数据并行处理脚本语言) 和YahooPig 都是很好的对比参考(当然,他们是更不 generic 的实现,更针对自己的问题),至于硬件对 parallel progarmming 的支持比如 transactional memory… 扯更远了哈。
出于照顾受众的原因,不少介绍和推广 multicore 处理器优势的资料都会说你可以一边运行杀毒软件,一边处理照片等等,我得说,这个比方真的很蠢,它模糊了实质,也让人觉得职业程序员们没干什么正事儿,可是,如果你没法跟他聊算法,数据流以及指令序列,那也就这么着了吧。
Jakob Nielsen 和 Steve Jobs 的看法有很多类似之处,大多数用户要么根本不知道自己要什么,要么说出来需要什么后,旋即转身要求其他更好的继而让他刚刚告诉你的东西成为废话。你得敏锐地观察他们的行为,分析趋势,这是个预测未来的活儿,你得做好准备去迎合至今尚不存在,将来却会铁板钉钉的那个“需求”。用户可能会觉得你现在提出的 idea 非其所需,或者不过是忽悠人,甚至蠢得可以,这样的过程在iPod身上发生过,在 Parallelism 身上正在发生。

TTB 基本的更多相关文章

  1. Tomcat服务器进击

    一.Tomcat服务器端口配置更改 Tomcat的所有配置都放在conf文件夹之中,server.xml文件就是配置的核心文件. 现在呢,我们需要将8080端口设置成8088端口. 启动端口默认: & ...

  2. MongoDB【第三篇】MongoDB基本操作

    MongoDB的基本操作包括文档的创建.删除.和更新 文档插入 1.插入 #查看当前都有哪些数据库 > show dbs; local 0.000GB tim 0.000GB #使用 tim数据 ...

  3. 如何设置Vimrc

    .title { text-align: center } .todo { font-family: monospace; color: red } .done { color: green } .t ...

  4. MMU工作原理

    MMU的工作原理就是把虚拟地址转换成物理地址. 虚拟地址:由编译器和连接器在定位程序时分配. 物理地址:用来访问实际的主存硬件模块. 使用虚拟存储器的系统都使用一种称为分页(paging).虚拟地址空 ...

  5. VIM配置

    Linux下的编辑器以vim和emacs为主流,一个编辑器之神,一个是神的编辑器. 本文以主要介绍如何在linux下以vim为基础搭建一个比较顺手的代码编辑器. 有两种比较流行的方式: 自动安装 手动 ...

  6. js实现多张图片每隔一秒换一张图片

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAlkAAAHWCAIAAADLlAuAAAAgAElEQVR4nOzd5XNc157w+/l7bt2n6t

  7. 会务准备期间材料准备工作具体实施总结 ----(vim技巧应用, python信息提取与整合, microsoft word格式调整批量化)

    会务准备期间材料准备工作具体实施总结(vim, python, microsoft word) span.kw { color: #007020; font-weight: bold; } code ...

  8. .net中创建xml文件的两种方法

    .net中创建xml文件的两种方法 方法1:根据xml结构一步一步构建xml文档,保存文件(动态方式) 方法2:直接加载xml结构,保存文件(固定方式) 方法1:动态创建xml文档 根据传递的值,构建 ...

  9. JMeter学习-023-JMeter 命令行(非GUI)模式详解(一)-执行、输出结果及日志、简单分布执行脚本

    前文 讲述了JMeter分布式运行脚本,以更好的达到预设的性能测试(并发)场景.同时,在前文的第一章节中也提到了 JMeter 命令行(非GUI)模式,那么此文就继续前文,针对 JMeter 的命令行 ...

随机推荐

  1. js字符串转json

    1,eval方式解析,这是最早的解析方式了.如下: 代码如下: function strToJson(str){ var json = eval('(' + str + ')'); return js ...

  2. C#。3.1 循环(叠加、穷举)

    循环. for 循环 嵌套的应用, 迭代.穷举 一.迭代法 每次循环都是从上次运算结果中获得数据,本次运算的结果都是要为下次运算做准备.例:1.100以内所有数的和. int sum = 0; for ...

  3. less样式表

    LESS是一种由Alexis Sellier设计的动态层叠样式表语言.受Sass所影响,同时也影响了Sass的新语法:SCSS.[2]  LESS是开源的,其第一个版本由Ruby写成,但在后续的版本当 ...

  4. JavaScript对象属性 constructor

     对象属性 constructor 属性返回对创建此对象的数组函数的引用; constructor(构造函数) 在对象创建或实例化时候被调用的方法.通常使用该方法来初始化数据成员和所需资源.构造函数不 ...

  5. 使用匿名管道在进程间通信 (System.IO.Pipes使用)(转)

    原文地址:http://www.cnblogs.com/yukaizhao/archive/2011/08/04/system-io-pipes.html 管道的用途是在同一台机器上的进程之间通信,也 ...

  6. SqlServer 数据库进行定时自动的执行脚本

    需求:数据库进行自动执行脚本操作,有些数据库操作就不需要写程序来定时执行,完全可以交给我们SqlServer客户端代理来做,下面的步骤,我是结合前一篇文章的SqlServer不同服务器数据库之间数据传 ...

  7. UML类图常见的几种关系

    关系:泛化(Generalization),实现(Realization),关联(Association),聚合(Aggregation),组合(Composition),依赖(Dependency) ...

  8. hadoop文本转换为序列文件

    在以前使用hadoop的时候因为mahout里面很多都要求输入文件时序列文件,所以涉及到把文本文件转换为序列文件或者序列文件转为文本文件(因为当时要分析mahout的源码,所以就要看到它的输入文件是什 ...

  9. mac版sublime text2包管理器安装步骤

    第一步: control+-打开命令执行窗口. 第二步: 将包管理器的代码复制到命令执行窗口: import urllib2,os,hashlib; h = '2915d1851351e5ee549c ...

  10. 解决jQuery中美元符号($)命名与别的js脚本库引用冲突方法

    在Jquery中,$是JQuery的别名,所有使用$的地方也都可以使用JQuery来替换,如$('#msg')等同于JQuery('#msg') 的写法.然而,当我们引入多个js库后,在另外一个js库 ...