TBB入门

原创 2007年11月12日 21:57:00

TBB入门

 

获取TBB

TBB的官方网站在http://threadingbuildingblocks.org/,可以在它的Downloads页面里找到Commercial Aligned Release,最新版是tbb20_014Windows上开发需要下载tbb20_014oss_src.tar.gztbb20_014oss_win.tar.gz。其它支持的平台有linuxmac

将下载后的压缩包解压后,tbb20_014oss_win.tar.gz里有:

tbb20_20070927oss_win/

em64t/    # Intel Extended Memory 64 Technology (Intel EM64T) Processor

vc7.1/

bin/

lib/

vc8/

ia32/              # Intel IA-32 Processor

vc7.1/

bin/

lib/

vc8/

bin/

lib/

我的处理器是IA32架构的(Intel P4),所以使用ia32下的库文件即可。

tbb20_014oss_src.tar.gz里有用的主要是include/目录,下面有TBB用到的所有头文件,当然examples/目录下有很多TBB的示例,可供学习。

 

配置

VC2005里,“工具”è“选项”里,设置VC++的包含文件和库文件,如下图:

TBB在VC2005里的配置

示例

VC2005里新建一个项目,输入如下代码,编译运行。

#include "stdafx.h"
#include 
"tbb/task_scheduler_init.h"
#include 
"tbb/blocked_range.h"
#include 
"tbb/parallel_for.h"

// 链接tbb_debug.lib
#pragma comment(lib, "tbb_debug.lib")

using namespace tbb;

// 对每个Item执行该操作
void Foo(float value)
...{
    printf(
"%.2f ", value);
}


class ApplyFoo
...{
    
float * const my_a;
public:
    
void operator () (const blocked_range<size_t> & r) const
    
...{
        
float * a = my_a;
        
for (size_t i = r.begin(); i != r.end(); ++ i)
            Foo(a[i]);
    }

    
    ApplyFoo(
float a[]) : my_a(a) ...{}
}
;

int _tmain(int argc, _TCHAR* argv[])
...{
    
// 创建task scheduler
    
// task_scheduler_init支持一个参数,以指定使用的线程数
    task_scheduler_init init;
    
float a[100];
    
for (int i = 0; i < 100; i ++)
        a[i] 
= (float)i;
    
// TBB会把数组分成若干的block
    
// 对block调用ApplyFoo这个functor
    parallel_for(blocked_range<size_t>(0100), ApplyFoo(a));
    
return 0;
}


该示例创建一个大小为100的数组,利用TBB提供的parallel_for算法对该数组应用并行算法,对每个Item应用Foo函数。在运行时我们会看到有多个线程同时执行Foo,在多核平台上运行结果更明显。

 

通过这个例子我们可以发现用TBB可以很好地方便并行程序的编写,通过TBB提供的算法可以实现对并行概念的抽象。

 

TBB组成

TBB里的内容大致可以分为以下几类:

-          通用并行算法

o         这是TBB里最主要的一大部分,比如示例里的parallel_for就是这部分的一个算法

o         TBB提供了parallel_forparallel_whileparallel_reduce等算法,应用于不同的并行算法场景

-          并发容器

o         这是对常见容器的线程安全版本的实现,同时考虑到performance的要求,提供了细粒度的锁机制,TBB2.0里提供的容器包括hash mapvectorqueue

-          任务调度器

o         提供了task机制的封装

-          同步原语

o         提供了原子操作、mutexlock等同步原语的封装

-          内存分配

o       提供了对cache机制更友好的支持

 

它们之间的关系如下图:

 TBB组成

 

TBB介绍

介绍这篇教程教你怎样使用Intel的Threading Building Blocks(Intel TBB),它是一个库帮助你利用多核提高性能,你不需要是个线程专家,这个项目可能首先看似使人畏惧,但是...
  • shaomingliang499
  • shaomingliang499
  • 2016年02月01日 11:46
  • 1178

Intel Thread Building Blocks (TBB) 入门篇

一、什么是TBB        TBB(Thread Building Blocks)是英特尔发布的一个库,全称为 Threading Building Blocks。TBB 获得过 17 届 Jol...
  • kezunhai
  • kezunhai
  • 2015年03月27日 17:19
  • 3987

TBB基础之parallel_for

从现在开始我们要看一些TBB里更实在的一些东西了,之所以说它实在,是因为这些内容是切实地能帮助我们去解决一些并行编程里的问题。首先看的也是最简单的parallel_for。我们还是先从一个例子开始看起...
  • zoufeiyy
  • zoufeiyy
  • 2007年11月15日 23:24
  • 9536

TBB(Intel Threading Building Blocks)学习笔记

TBB(Intel Threading Building Blocks)学习笔记 并行与并发是相对的,OS里讲的是并发而在架构方面更多的是说并行。并行是分多个层面的,个人认为基本上可以分为这么几个层...
  • pizi0475
  • pizi0475
  • 2013年12月26日 17:46
  • 6977

VS2015和TBB配合使用

前提 vs2015平台和TBB库,其中TBB库可以从官网https://www.threadingbuildingblocks.org/上进行下载。我这里使用的是tbb2017_20170226os...
  • dwosion
  • dwosion
  • 2017年05月25日 12:43
  • 684

hello,intel TBB

Intel Threading BuildingBlocks(Intel TBB)是一个使用ISO C++代码实现的多平台、可扩展并行编程库。 但目前为止这方面的中文资料却很少。初步了解TBB时,并非...
  • saga1979
  • saga1979
  • 2012年06月09日 18:02
  • 9520

VS编译环境中TBB配置和C++中lambda表达式

TBB(Thread Building Blocks),线程构建模块,是由Intel公司开发的并行编程开发工具,提供了对Windows,Linux和OSX平台的支持。 TBB VS编译环境配置 ...
  • dcrmg
  • dcrmg
  • 2017年01月11日 23:08
  • 1566

Intel TBB简介及在Windows7 VS2013上源码的编译过程

Intel TBB简介及在Windows7 VS2013上源码的编译过程
  • fengbingchun
  • fengbingchun
  • 2017年02月27日 21:55
  • 2347

VS2010+OpenCV2.3.1环境下使用tbb加速示例

网上下载tbb40_20110809oss解压 安装具体过程 详细见http://bbs.elecfans.com/blog-710245-234834.html 重点讲下TBB的配置,其实跟ope...
  • kaka_36
  • kaka_36
  • 2014年10月31日 10:44
  • 3784

TBB的环境配置

在windows下配置(以window xp为例子) 1.首先要安装vistual studio 2005/2008都可以,安装的选项时候记得要把C++选上 2.到http://www.t...
  • freeboy1015
  • freeboy1015
  • 2012年03月16日 09:53
  • 2324
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:TBB入门
举报原因:
原因补充:

(最多只允许输入30个字)