作者:杜伟

英特尔® 线程构建模块 (Intel® TBB) 是最为人们熟知的一种 C++ 线程库,其最新的版本现已更新至 4.2。 与之前的 4.1 版本相比,更新后的版本提供了多个重要的新特性。 一些特性已经在 TBB 4.1 更新中发布出来。

新的同步基元speculative_spin_mutex提供了对推测锁定的支持。 这使得在第 4 代英特尔® 酷睿™ 处理器上使用英特尔(R) 事务性同步扩展 (Intel® TSX) 硬件特性成为可能。 只要不出现可能会产生不同于非推测性锁定的结果的“冲突”,推测互斥锁在支持硬件事务性内存 (如英特尔® TSX) 的处理器上工作时就会允许多个线程获取同一个锁。 因此在非竞争性案例中就不会发生串行化。 这样就能在“短”的关键区域上大幅提高性能和可扩展性。 如果不为事务性同步提供硬件支持,推测互斥锁的作用将与非推测互斥锁类似,同时很可能会表现出更差的性能。

英特尔 TBB 现在支持准确的异常传播特性(基于 C++11 exception_ptr)。 借助 exception_ptr,异常对象可以在线程之间安全地拷贝。 这为多线程环境中的异常处理提供了灵活性。 现在准确的异常传播在所有平台的预构建库中都已提供,例如: OS X*、Windows* 和 Linux*。 OS X* 上存在两种库: 第一个库与 gcc 标准库相关联 — 默认情况下该库不支持准确的异常传播。 为了使用该特性,您应当使用与 libc++ (Clang 中的 C++ 标准库) 相关联的第二种库。 为了使用这些特性,请先创建 Intel TBB 环境然后按照以下方式构建您的应用:

# tbbvars.sh libc++
# clang++ -stdlib=libc++ -std=c++11 concurrent_code.cpp -ltbb

除concurrent_unordered_set和concurrent_unordered_map容器之外,我们现在提供concurrent_unordered_multiset和concurrent_unordered_multimap,基于 Microsoft* PPL 原型。借助concurrent_unordered_multiset,您可以多次插入一项,而这在concurrent_unordered_set中是不可能实现的。 同样,concurrent_unordered_multimap允许您使用同一个键值插入一个以上的<键,值>对。 就“多” 容器而言,find会在带有一个匹配搜索键的表格中返回第一项(或者 <键,值> 对)。

Intel TBB 容器现在可以使用 C++ 11 指定的值列表(初始化程序列表)方便地进行初始化:

1 tbb::concurrent_vector<int> v ({1,2,3,4,5} );

当前,支持初始化程序列表的容器有以下几种:

concurrent_vector
concurrent_hash_map
concurrent_unordered_set
concurrent_unordered_multiset
concurrent_unordered_map
concurrent_unordered_multimap
concurrent_priority_queue

可扩展内存分配程序为每个线程内的已分配内存都提供了高速缓存。 这种做法虽然确保了性能,但通常会增加内存的使用率。 尽管该内存分配程序尽量避免过度使用内存,在复杂的情况下 Intel TBB 4.2 还是会把更多的控制权交给程序设计员: 现在可以通过使用scalable_allocation_command()函数清理线程高速缓存,进而达到减少内存消耗的目的。 这也有助于大幅提高分配程序的整体性能。

Intel TBB 库已在多种不同平台上获得了广泛的使用。 移动开发人员现在可以在 Linux* 操作系统包中找到适合 Android 的预构建二进制文件。 Windows Store* 应用的二进制文件已经被添加到 Windows* 操作系统包中。

原子变量tbb::atomic<T>现在在 C++11 中使用时已经具备了构造函数。 这允许程序设计员在声明时就对它们的值进行初始化,同时正确支持构造表达式。 此时,以下代码对 gcc 和 Clang 编译器是有效的:

1 tbb::atomic<int> v=5;

新社区预览特性允许等待,直到所有工作线程终止。 在应用程序分解进程时,这种情况可能很有必要,否则 TBB 动态库可能会从运行时中卸载掉(例如,假如 TBB 是一个插件的一部分)。 如果您想启用工作线程等待功能,请按以下方式对task_scheduler_init对象进行初始化:

1 #define TBB_PREVIEW_WAITING_FOR_WORKERS 1
2 tbb::task_scheduler_init scheduler_obj (threads, 0, /*wait_workers=*/true);

关于最新英特尔 TBB 4.2 的网站:商用和开源。下载并开始使用全新功能!

新特性:英特尔® 线程构建模块 4.2相关推荐

  1. 学习英特尔线程构建模块开源2.1库

    并行编程是未来,但是您如何才能有效利用多核CPU的高性能并行编程呢? 当然,也可以选择使用诸如POSIX线程之类的线程库,但是最初是出于C语言引入POSIX线程框架的. 这也是一种太底层的方法,例如, ...

  2. 为Android运行新的英特尔模拟器

    本文翻译自:Running the new Intel emulator for Android Lately Google and Intel have published a new way to ...

  3. 用于物联网网关和边缘的 20 个新的基于英特尔的计算机模块

    计算机模块和单板计算机供应商康佳特推出了 20 款新的计算机模块 (COM),以针对要求苛刻的物联网 (IoT) 网关和边缘计算应用程序.这些模块采用第 11 代英特尔酷睿博锐.英特尔至强 W-110 ...

  4. 英特尔服务器新消息,英特尔10nm Ice Lake-SP服务器处理器或将延迟到2021年第一季度...

    10月6日消息 据报道,服务器品牌供应链表示,第四季度出货存在较大变数,出货量将有所疲软.主要是业界内称英特尔 10nm 的 Ice Lake-SP 服务器处理器到明年第一季度才能出炉,导致大部分品牌 ...

  5. 并发新特性—Executor 框架与线程池

    Executor 框架简介 在 Java 5 之后,并发编程引入了一堆新的启动.调度和管理线程的API.Executor 框架便是 Java 5 中引入的,其内部使用了线程池机制,它在 java.ut ...

  6. JDK5.0新特性系列---11.4线程 Condition

    import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util ...

  7. 使用英特尔® 图形性能分析器分析实际游戏性能

    Philipp Gerasim... 于 星期一, 04/07/2011 - 21:28 提交 作者:郭胜.Philipp Gerasimov.Neal P. 和 Bonnie Aona 英特尔公司软 ...

  8. 使用采用 Android* OS 的英特尔® 集成性能基元

    作者:Jeffrey Mcallis 本教程介绍了如何使用英特尔® IPP设置 Android* OS 应用.该库可提供多种功能,可让您将重心放在应用的开发而非特定处理器细节上.它们是面向英特尔处理器 ...

  9. 英特尔发布全新英特尔® INDE 2015 工具套件

    2014年10月15日,英特尔发布了全新的英特尔® Integrated Native DeveloperExperience 2015工具套件(简称英特尔® INDE).该产品提供了一系列最佳工具和 ...

最新文章

  1. 缓存技术比拼:Redis与Memcached的同与不同
  2. java 句柄池_深入理解JVM之Java对象的创建、内存布局、访问定位详解
  3. [codevs 1915] 分配问题
  4. (兔子繁殖问题)有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到三个月后每个月又生一对兔子,假如兔子都不死,问32个月过后的兔子总数为多少?...
  5. 基于ZYNQ FPGA实现8路ADC数据采集存储(AD7606)
  6. jquery解析php json,使用jQuery解析PHP Json对象.
  7. Python---列表与元组
  8. C++ typename 的双重含义
  9. 电脑上玩和平精英_和平精英新手怎么玩 和平精英新手攻略
  10. 美图欣赏,转载[原文链接http://toutiao.com/a4001258776/]
  11. 苹果手机怎样软件签名?
  12. 超级详细的手把手教你使用Lighthouse更好推动项目性能优化,性能指标详解,优化方法,需要关注指标分析
  13. 按键精灵 获取某网站服务器时间,按键精灵如何获得网络时间的毫秒
  14. 计算机如何去除桌面名称阴影,去除桌面图标阴影 - 桌面图标有蓝色阴影怎么去掉 - 安全专题...
  15. 华为中兴和中国政府可准备两项法律反击
  16. mysql 在当前时间上加几小时
  17. 正确的临摹方法,小白零基础临摹教程
  18. 第二十二章 opengl之高级OpenGL(几何着色器)
  19. 常见的五种神经网络(4)-深度信念网络(下)篇之深度信念网络的原理解读、参数学习
  20. TM1650数码管驱动芯片驱动数码管读取按键程序

热门文章

  1. 冠军轮流转:Q3 季苹果超越小米,回到全球最大的可穿戴设备厂商宝座
  2. 如果你在aws ec2上安装php7x 的时候提示 libwebp 错误,可以试一下下面这个代码...
  3. android graphic(15)—fence
  4. 工厂方法(Factory Pattern)
  5. 通过Chrome扩展来批量复制知乎好友
  6. pushViewController自定义动画http://blog.csdn.net/ralbatr/article/details/22039233
  7. 我是主考官:给一位应届毕业生的回信
  8. Spring 框架学习 有用
  9. RabbitMQ入门教程
  10. 基于Keras机器学习库的分类预测