TBB组成

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

  • 通用并行算法

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

TBB提供了parallel_for,parallel_while,parallel_reduce等算法,应用于不同的并行算法场景

  • 并发容器

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

  • 任务调度器

提供了task机制的封装

  • 同步原语

提供了原子操作、mutex、lock等同步原语的封装

  • 内存分配

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

TBB示例

#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这个functorparallel_for(blocked_range<size_t>(0, 100), ApplyFoo(a));return 0;
}

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

TBB简介和一个简单的示例相关推荐

  1. vue 如何生成一个dom元素_通过一个简单的示例学习如何编写Vue组件

    大家好,本篇文章我将带着大家一起学习如何编写自定义组件(Components),通过「vue基础」新手快速入门篇(一)这篇文章的学习,我们知道了 Vue 设计的目的就是为了方便我们创建基于组件UI的项 ...

  2. JBoss 系列九十六:JBoss MSC - 简介及一个简单演示样例

    什么是 JBoss MSC JBoss MSC 即 JBoss Modular Service Container,是第三代 JBoss 产品 JBoss 7和WildFfly的内核,JBoss MS ...

  3. JME3教程:Android创建一个简单的示例

    作者:忆逝丷 不得转载!不得转载!不得转载! 找遍全网都没有一个安卓的教程,我研究了好几天,终于研究出来了,分享一下给大家. 首先需要对安卓中的view,assets,libso存放位置有一定的了解. ...

  4. 神经进化学的简介和一个简单的CPPN(Compositional Pattern Producing Networks)DEMO

    近期迷上神经进化(Neuroevolution)这个方向,感觉是Deep Learning之后的一个非常不错的研究领域. 该领域的一个主导就是仿照人的遗传机制来进化网络參数与结构.注意,连网络结构都能 ...

  5. NLP的Flair简介:一个简单但功能强大的最先进的NLP库

    目录 什么是'Flair'图书馆? 什么赋予了边缘? 用于序列标记的上下文字符串嵌入简介

  6. 一个简单的使用支持向量机(SVM)进行回归预测的Python代码示例,包含了源数据和注释

    使用了scikit-learn库中的SVR类来实现支持向量机回归模型.首先,我们导入了所需的库,包括numpy用于处理数据,train_test_split用于划分训练集和测试集,SVR用于构建SVM ...

  7. WCF入门(一)——简单的示例

    这篇随笔写了一段时间了,当时没有发布,今天整理文档的时候发现了,顺便给配了些图.主要是绍了一下WCF编程模型,并给了一个简单的示例. 概述 WCF框架是下一代.NET平台通信应用程序的核心.它包含了W ...

  8. java继承类型转换_#java 一个简单的例子理解java继承、成员函数重写、类型转换...

    一个简单的例子理解java继承.成员函数重写.类型转换 1.继承简介 举一个简单的例子:笔分为很多种,比如毛笔.钢笔.圆珠笔等等,这些笔都有一些相同的属性比如长度.笔迹的粗细等等:但他们也有不同的特点 ...

  9. jax-rs jax-ws_创建一个简单的JAX-RS MessageBodyWriter

    jax-rs jax-ws JAX-RS确实很棒,借助JAXB,只需添加带有JAXB批注的批注数据对象,即可为您转换许多响应数据类型. 我对JAXB相当陌生,但是一些简单的注释的剪切/粘贴操作将带给您 ...

最新文章

  1. Android之全面解析OkHttp源码
  2. POJ1321(棋盘问题)
  3. 可视化Python设计工具
  4. OAuth 2.0协议在SAP产品中的应用
  5. 培训时常犯的学习误区与应对方法
  6. 微信成最频繁网络诈骗犯罪工具;库克再谈乔布斯;PyCharm 2019.2.5 发布| 极客头条...
  7. ruby Enumerator::lazy
  8. 安卓开发硬件开发之-大华条码秤开发1
  9. 求生之路2显示组服务器,求生之路2配置文件改服务器组
  10. 如何通过外包平台承接IT项目
  11. fabio 安装试用实际使用的几个问题
  12. 堆排序小根堆 大根堆 迭代 递归 总结 完整代码
  13. Mysql—时间戳的转换
  14. 统计学-基于R (第四版) 贾俊平编著 第二章: 数据可视化 2.1, 2.2 习题答案 【自用】
  15. FPGA 24 工程模块 红外遥控(NEC协议)解码
  16. 2021山西高考口试成绩查询,2021年山西高考成绩电话手机查询方法入口 附成绩打印教程...
  17. java百度上传控件_百度Bos上传文件工具类-BosUtils(java)
  18. ISO Country Code - 标准国家码
  19. STM32F1与STM32CubeIDE编程实例-振动传感器驱动
  20. js篇--学习web-api第一天(DOM的学习)

热门文章

  1. 报错libpng warning: iCCP: cHRM chunk does not match sRGB
  2. win10 安装oracle11g完整教程
  3. Rosalind Java|Overlap Graphs
  4. stm32实现毫秒ms微秒us级延时
  5. Android Remote Views
  6. JavaScript基本原理常识
  7. 阿里云ACP考试模拟试题(2)
  8. java批量生成pdf
  9. pycharm 配置 interpreter
  10. Allegro如何使用Snake命令走蛇形线操作指导