TBB简介和一个简单的示例
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简介和一个简单的示例相关推荐
- vue 如何生成一个dom元素_通过一个简单的示例学习如何编写Vue组件
大家好,本篇文章我将带着大家一起学习如何编写自定义组件(Components),通过「vue基础」新手快速入门篇(一)这篇文章的学习,我们知道了 Vue 设计的目的就是为了方便我们创建基于组件UI的项 ...
- JBoss 系列九十六:JBoss MSC - 简介及一个简单演示样例
什么是 JBoss MSC JBoss MSC 即 JBoss Modular Service Container,是第三代 JBoss 产品 JBoss 7和WildFfly的内核,JBoss MS ...
- JME3教程:Android创建一个简单的示例
作者:忆逝丷 不得转载!不得转载!不得转载! 找遍全网都没有一个安卓的教程,我研究了好几天,终于研究出来了,分享一下给大家. 首先需要对安卓中的view,assets,libso存放位置有一定的了解. ...
- 神经进化学的简介和一个简单的CPPN(Compositional Pattern Producing Networks)DEMO
近期迷上神经进化(Neuroevolution)这个方向,感觉是Deep Learning之后的一个非常不错的研究领域. 该领域的一个主导就是仿照人的遗传机制来进化网络參数与结构.注意,连网络结构都能 ...
- NLP的Flair简介:一个简单但功能强大的最先进的NLP库
目录 什么是'Flair'图书馆? 什么赋予了边缘? 用于序列标记的上下文字符串嵌入简介
- 一个简单的使用支持向量机(SVM)进行回归预测的Python代码示例,包含了源数据和注释
使用了scikit-learn库中的SVR类来实现支持向量机回归模型.首先,我们导入了所需的库,包括numpy用于处理数据,train_test_split用于划分训练集和测试集,SVR用于构建SVM ...
- WCF入门(一)——简单的示例
这篇随笔写了一段时间了,当时没有发布,今天整理文档的时候发现了,顺便给配了些图.主要是绍了一下WCF编程模型,并给了一个简单的示例. 概述 WCF框架是下一代.NET平台通信应用程序的核心.它包含了W ...
- java继承类型转换_#java 一个简单的例子理解java继承、成员函数重写、类型转换...
一个简单的例子理解java继承.成员函数重写.类型转换 1.继承简介 举一个简单的例子:笔分为很多种,比如毛笔.钢笔.圆珠笔等等,这些笔都有一些相同的属性比如长度.笔迹的粗细等等:但他们也有不同的特点 ...
- jax-rs jax-ws_创建一个简单的JAX-RS MessageBodyWriter
jax-rs jax-ws JAX-RS确实很棒,借助JAXB,只需添加带有JAXB批注的批注数据对象,即可为您转换许多响应数据类型. 我对JAXB相当陌生,但是一些简单的注释的剪切/粘贴操作将带给您 ...
最新文章
- Android之全面解析OkHttp源码
- POJ1321(棋盘问题)
- 可视化Python设计工具
- OAuth 2.0协议在SAP产品中的应用
- 培训时常犯的学习误区与应对方法
- 微信成最频繁网络诈骗犯罪工具;库克再谈乔布斯;PyCharm 2019.2.5 发布| 极客头条...
- ruby Enumerator::lazy
- 安卓开发硬件开发之-大华条码秤开发1
- 求生之路2显示组服务器,求生之路2配置文件改服务器组
- 如何通过外包平台承接IT项目
- fabio 安装试用实际使用的几个问题
- 堆排序小根堆 大根堆 迭代 递归 总结 完整代码
- Mysql—时间戳的转换
- 统计学-基于R (第四版) 贾俊平编著 第二章: 数据可视化 2.1, 2.2 习题答案 【自用】
- FPGA 24 工程模块 红外遥控(NEC协议)解码
- 2021山西高考口试成绩查询,2021年山西高考成绩电话手机查询方法入口 附成绩打印教程...
- java百度上传控件_百度Bos上传文件工具类-BosUtils(java)
- ISO Country Code - 标准国家码
- STM32F1与STM32CubeIDE编程实例-振动传感器驱动
- js篇--学习web-api第一天(DOM的学习)