关闭

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

2061人阅读 评论(0) 收藏 举报
分类:

Intel TBB(Intel Threading Building Blocks)是Intel线程构建块开源库,它的License是Apache 2.0.

         Intel TBB是一种用于并行编程的基于C++语言的框架,它是一套C++模板库。它提供了大量特性,具有比线程更高程度的抽象。

         Intel TBB可以在Windows、Linux和OSX上运行,支持Intel、Microsoft和GNU工具。

         Intel TBB特性:

         (1)、与线程不同,你可以对任务使用更高程度的抽象。Intel声称,在Linux系统上,启动和结束任务的速度是对线程执行相同操作的18倍;

(2)、Intel TBB附带了一个任务调度程序,该程序可以跨多个逻辑和物理内核高效地处理负载平衡。Intel TBB 中的默认任务调度策略不同于大多数线程调度程序所拥有的轮询策略;

(3)、Intel TBB提供了一些可直接使用的线程安全容器;

(4)、可以使用通用的并行算法,如parallel_for和parallel_reduce;

(5)、模板类atomic中提供了无锁(Lock-free,也称为mutex-free)并发编程支持。这种支持使得Intel TBB适合用于高性能的应用程序,因为Intel TBB可以锁定和解除锁定互斥体 (mutex);

Intel TBB注意事项:

(1)、要运行Intel TBB程序,则必须正确地初始化任务调度程序;

(2)、Intel TBB提供了一个名为task_list容器,可以将它用作一个任务集合;

(3)、每个父任务都使用allocate_child函数调用创建一个子任务;

(4)、在衍生出任何子任务之前,父任务必须调用set_ref_count。如果没有这么做,则会导致出现未定义的行为。如果打算衍生一些子任务,然后等待它们完成,那么count的值必须为子任务数+ 1;否则,count会等于子任务的数量;

(5)、最好由调度程序决定最佳的线程数量;

         在Windows7 VS2013上编译Intel TBB源代码操作步骤:

         (1)、从 https://www.threadingbuildingblocks.org/download 下载源代码tbb2017_20161128oss_src.tgz ;

         (2)、新建三个空工程,分别为tbb、tbbmalloc、tbbmalloc_proxy,项目配置类型为动态库(.dll),其中tbb、tbbmalloc项目有汇编文件的参与,因此需要在tbb、tbbmalloc工程加入汇编文件的支持,步骤如下:

         选中tbb或tbbmalloc--> 生成依赖项 --> 生成自定义 --> 勾选masm,点击确定;

         (3)、将相应文件加入到工程中;

         (4)、生成tbb.def文件:这里有三种简单方法(tbb.def可以由CMake通过win64-tbb-export.def和win64-tbb-export.lst文件产生):

A、在tbb2017_20161128oss_src/build/vs2012目录下,打开makefile.sln,升级到vs2013版本,编译tbb工程,期间便会生成tbb.def文件;

B、从 https://github.com/wjakob/tbb 下载Intel TBB,其提供在Windows下用cmake-gui.exe生成vs2013解决方案,编译tbb工程,期间也会生成tbb.def文件;

C、从https://www.threadingbuildingblocks.org/download下载二进制文件tbb2017_20161128oss_win,在lib/intel64/vc**目录内也有tbb.def文件;

(5)、将tbb.def文件加入到tbb工程属性 --> 链接器 --> 命令行 --> 其它选项中;

(6)、生成tbbmalloc.def文件:与以上(4)、(5)中步骤一致;

(7)、三个工程编译顺序:先tbb,然后tbbmalloc,最后再是tbbmalloc_proxy,后者会依赖前者;

(8)、新创建一个IntelTBB_Test控制台工程,测试代码如下:

#include "funset.hpp"
#include <iostream>
#include <tbb/tbb.h>

// reference: http://www.ibm.com/developerworks/cn/aix/library/au-intelthreadbuilding/
class first_task : public tbb::task {
public:
	tbb::task* execute() {
		fprintf(stderr, "Hello World!\n");
		return nullptr;
	}
};

int test_IntelTBB_1()
{
	tbb::task_scheduler_init init(tbb::task_scheduler_init::automatic);
	first_task& f1 = *new(tbb::task::allocate_root()) first_task();
	tbb::task::spawn_root_and_wait(f1);

	return 0;
}

class first_task_2 : public tbb::task {
public:
	tbb::task* execute() {
		fprintf(stderr, "Hello World!\n");
		tbb::task_list list1;
		list1.push_back(*new(allocate_child()) first_task_2());
		list1.push_back(*new(allocate_child()) first_task_2());
		set_ref_count(3); // 2 (1 per child task) + 1 (for the wait) 
		spawn_and_wait_for_all(list1);
		return nullptr;
	}
};

int test_IntelTBB_2()
{
	first_task& f1 = *new(tbb::task::allocate_root()) first_task();
	tbb::task::spawn_root_and_wait(f1);

	return 0;
}

class say_hello {
public:
	say_hello(const char* str) : message(str) {  }
	void operator( ) () const {
		fprintf(stderr, "%s\n", message);
	}
private:
	const char* message;
};

int test_IntelTBB_3()
{
	tbb::task_group tg;
	tg.run(say_hello("child 1")); // spawn task and return
	tg.run(say_hello("child 2")); // spawn another task and return 
	tg.wait(); // wait for tasks to complete

	return 0;
}

GitHub:https://github.com/fengbingchun/Face_Test

1
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

Linux下TBB安装及编译

TBB
  • u010793236
  • u010793236
  • 2017-06-30 17:11
  • 1392

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

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

Linux下TBB安装及编译

TBB
  • u010793236
  • u010793236
  • 2017-06-30 17:11
  • 1392

【Opencv】通过CMake编译Opencv,开启ippicv、tbb、ffmpeg功能

转载标明出处即可~下载的编译好的Opencv代码一般不开启如题的功能。而Ipp tbb可以用来优化性能,ffmpeg方便视频采集等。所以有必要重新编译一版附带上面功能的Opencv库。下载地址CMak...
  • Cooli7wa
  • Cooli7wa
  • 2017-01-06 22:49
  • 3312

Windows7上使用VS2013编译Caffe源码(不带GPU支持)步骤

Windows7上使用VS2013编译Caffe源码(不带GPU支持)步骤!
  • fengbingchun
  • fengbingchun
  • 2015-08-23 15:24
  • 26442

Win7和VS2013上使用Intel的TBB

http://wenku.baidu.com/link?url=zH7vwmWltWF5R-9YGUDq5oSszkoWDxknBJmZkFY4w6FzV1P55h5XClOCd6UoB3tYCYjY...
  • u012361418
  • u012361418
  • 2015-05-01 22:40
  • 510

64位+VS2013+OpenCV2.4.9+CMake+TBB 编译OpenCV源码

1. 下载 2. 安装tbb 3. Cmake生成自己opencv库(可以修改源码哦) 4. 编译源码
  • jtcjump
  • jtcjump
  • 2014-10-28 09:24
  • 2911

caffe windows7 64x 无GPU vs2013环境下编译与调用

首先要在微软的github上下载windows版本的caffe。 下载后,将caffe-master/windows/CommonSettings.props.example复制为CommonSet...
  • sulei1122
  • sulei1122
  • 2017-07-29 10:21
  • 212

源码管理工具--Windows7 Home高级 64 中文版 + TortoiseSVN 64 英文版 + SVN Server 32 英文版安装过程

转自:http://blog.csdn.net/cheny_com/article/details/6451732/ 参考了http://blog.csdn.net/wang02011/archiv...
  • zhejingyuan
  • zhejingyuan
  • 2013-06-17 10:24
  • 1460

源码管理工具--Windows7 Home高级 64 中文版 + TortoiseSVN 64 英文版 + SVN Server 32 英文版安装过程

转自:http://blog.csdn.net/cheny_com/article/details/6451732/ 参考了http://blog.csdn.net/wang02011/archiv...
  • caiye917015406
  • caiye917015406
  • 2013-04-06 11:35
  • 1080
    个人资料
    • 访问:3501418次
    • 积分:34878
    • 等级:
    • 排名:第146名
    • 原创:515篇
    • 转载:140篇
    • 译文:0篇
    • 评论:1892条
    最新评论