Intel Threading Building Blocks编程指南
分类: 图书,计算机/网络,程序设计,其他,
作者: (美)仁达敬(Reinders,J)著;聂雪军等译
出 版 社: 机械工业出版社
出版时间: 2009-1-1字数:版次: 1页数: 323印刷时间: 2009/01/01开本: 16开印次: 1纸张: 胶版纸I S B N : 9787111242314包装: 平装编辑推荐
“串行计算的时代已经结束了……本书很好地介绍了线程构建模块库,无论是初学者还是专家,都能通过本书清晰地理解并发的复杂性。”
——Charles E.Leiserson,麻省理工大学计算机与人工智能实验室
“我们通常习惯说,首先要使程序正确,然后再提高程序的速度。现在,我们无需这么做。TBB使我们在正确地设计程序的同时,还能提升Maya前台视图的速度。本书将向你展示如何通过在代码中使用TBB来获得最大的性能提升。”
——Martin Watt,Autodesk公司高级软件工程师
本书介绍了如何通过Intel线程构建模块来最大限度地利用多核处理器的强大性能。TBB是一个可移植的C++库,能够运行在Windows、Linux、Macintosh以及uNIx等系统上。本书阐述了在多线程编程中的关键任务以及如何通过TBBE上可移植的和稳定的方式来实现它们。书中包含了大量的示例和丰富的资料,给出了常见的使用模式,揭示了TBB中的精彩之处,并且还提供了一些指导意见,用来在不同的并行编程方式上进行选择以获得最佳的性能。本书的内容包括:
• 充分利用多核系统中并行语义的简单且高效的方式。
• 编写并行程序的关键问题。
• 多线程中的常见模式。
• 用于高效处理的线程安全容器。
• 任务调度。
• 在线程环境中的内存管理。
本书说明了TBB能够比原始线程更方便地在c++中指定并行语义,同时还可以提升程序的性能、可移植性以及可伸缩性。在开始学习TBB时,并不要求具备并行编程或者多核处理器的经验。任何希望在多核系统上编写软件的程序员,都能够从本书中获益。
内容简介
多核处理器的出现使得并行编程成为了每个程序员关注的主题。不具备多处理器核的计算机系统已经变得越来越少。本书为c++程序给出了并行编程的解决方案,它既不要求放弃c++,也不要求使用那些裸线程或者本地线程。
本书介绍的是Intel线程构建模块。线程构建模块是一个用来实现并行语义的c++模板库,它对c++进行了扩展,抽象出了线程管理机制并支持简明的并行编程。在使用这个库时,你所要指定的是任务而不是线程,然后库将高效自动地将这些任务映射到线程上。如果希望程序在处理器核不断增加的情况下也能够继续运行,那么这种方式将带来许多好处。与裸线程相比,线程构建模块能够使你更方便地表达并行语义,同时还能够提高程序的性能,可移植性和可扩展性。在使用本书时,你无需任何并行编程经验或者在多核处理器上的编程经验。无论你是拥有丰富的并行编程经验,还是对并行编程一无所知,本书的内容都将是非常有用的。此外,本书也不要求之前是否对线程有所了解。
作者简介
James Reinders(仁达敬),Intel软件开发产品部门的首席讲师。他是一位高级工程师,于1989年加入Intel公司。他在许多项目上做出了贡献,包括世界上第一台万亿次浮点运算超级计算机(ASCI Red)以及iWarp、Pentium Pro、Pentium Ⅱ、Itanium、Pentium 4等处理器上的编译器和架构工作。他在处理器架构、编译器优化、并行计算机架构以及为软件开发人员编写工具产品上有着多年的经验。
Reinders还是WWW.goparallel.com网站上月刊“The Gauntlet”的专栏编辑,他还编写了《VTune Performance Analyzer Essentials》(Intel Press)一书,并参与编写了《Multi—Core Programming》(Intel Press)一书。
目录
致中文版读者
序
Intel线程构建模块首席开发师的笔记
前言
第1章为什么需要线程构建模块
简介
优势
第2章并行思维
并行思维的要素
分解
扩展性与加速性
什么是线程
互斥和锁
正确性
抽象
模式
直觉思维
第3章基本算法
库的初始化和结束
循环的并行化
递归区间的定义
对循环的小结
第4章高级算法
用于流的并行算法
第5章容器
cocurrent_queue
ConCUrrent_VeCtOr
concurrent_hash_map
第6章可扩展的内存分配.
限制
内存分配中的若干问题
内存分配器
替换malloc、new和delete
第7章互斥
何时使用互斥
Mutexes
互斥量
原子操作
第8章计量
第9章任务调度器
第10章成功的关键因素
第11章编程示例
第12澡发展历程及相关项目
书摘插图
第1章为什么需要线程构建模块
简介
多核处理器正在变得日益普及,而利用现有的线程软件包来编写一个简单的paralle_for循环却是一项乏味的工作。要编写一个高效的可扩展(scalable)程序则更为困难。可扩展性体现的是这样的概念:随着处理器中核数量的增加,程序的性能能够得到相应的提升。
随着在新推出的处理器中有着越来越多的核,使用线程构建模块来编写程序将帮助你从中获得许多好处。
线程构建模块是一个用来支撑可扩展并行编程的库,它是用标准的C++代码实现的。它不需要专门的语言或者编译器。线程构建模块可以几乎应用于所有处理器或者操作系统上的任何一种c++编译器中,这种强大的功能对于程序员来说是非常有吸引力的。
线程构建模块通过模板来提供常见的并行迭代模式,这使得程序员即使在不具备同步、负载均衡以及快存优化等专门知识的情况下,也能够从多核处理器中获得性能提升。使用线程构建模块编写的程序既能够运行在单核处理器的系统上,也能够运行在多核处理器的系统上。线程构建模块促进了可扩展数据并行编程技术的发展。此外,它还支持嵌套并行,因此你可以很容易地从小型的并行组件中构建出大型的并行组件。在使用这个库时,你需要指定的是任务,而不是线程,然后再通过这个库以高效的方式将任务自动映射到线程。因此,与裸线程(Raw Thread)相比,线程构建模块能够更方便地实现并行,并获得更优的结果。
……