本书全面涵盖了并行软件和硬件的方方面面,深入浅出地介绍如何使用mpi(分布式内存编程)、pthreads和openmp(共享内存编程)编写高效的并行程序。各章节包含了难易程度不同的编程习题。
本书可以用做计算机科学专业低年级本科生的专业课程的教材,也可以作为软件开发人员学习并行程序设计的专业参考书。
《并行程序设计导论》
出版者的话
译者序
本书赞誉
前言
致谢
第1章为什么要并行计算
1.1为什么需要不断提升的性能
1.2为什么需要构建并行系统
1.3为什么需要编写并行程序
1.4怎样编写并行程序
1.5我们将做什么
1.6并发、并行、分布式
1.7本书的其余部分
1.8警告
1.9字体约定
1.10小结
1.11习题
第2章并行硬件和并行软件
2.1背景知识
.2.1.1冯·诺依曼结构
2.1.2进程、多任务及线程
2.2对冯·诺依曼模型的改进
2.2.1cache基础知识
2.2.2cache映射
2.2.3cache和程序: 一个实例
2.2.4虚拟存储器
2.2.5指令级并行
2.2.6硬件多线程
2.3并行硬件
2.3.1simd系统
2.3.2mimd系统
2.3.3互连网络
2.3.4cache一致性
2.3.5共享内存与分布式内存
2.4并行软件
2.4.1注意事项
2.4.2进程或线程的协调
2.4.3共享内存
2.4.4分布式内存
2.4.5混合系统编程
2.5输入和输出
2.6性能
2.6.1加速比和效率
2.6.2阿姆达尔定律
2.6.3可扩展性
2.6.4计时
2.7并行程序设计
2.8编写和运行并行程序
2.9假设
2.10小结
2.10.1串行系统
2.10.2并行硬件
2.10.3并行软件
2.10.4输入和输出
2.10.5性能
2.10.6并行程序设计
2.10.7假设
2.11习题
第3章用mpi进行分布式内存编程
3.1预备知识
3.1.1编译与执行
3.1.2mpi程序
3.1.3mpi_init和mpi_finalize
3.1.4通信子、mpi_comm_size和mpi_comm_rank
3.1.5spmd程序
3.1.6通信
3.1.7mpi_send
3.1.8mpi_recv
3.1.9消息匹配
3.1.10status_p参数
3.1.11mpi_send和mpi_recv的语义
3.1.12潜在的陷阱
3.2用mpi来实现梯形积分法
3.2.1梯形积分法
3.2.2并行化梯形积分法
3.3i/o处理
3.3.1输出
3.3.2输入
3.4集合通信
3.4.1树形结构通信
3.4.2mpi_reduce
3.4.3集合通信与点对点通信
3.4.4mpi_allreduce
3.4.5广播
3.4.6数据分发
3.4.7散射
3.4.8聚集
3.4.9全局聚集
3.5mpi的派生数据类型
3.6mpi程序的性能评估
3.6.1计时
3.6.2结果
3.6.3加速比和效率
3.6.4可扩展性
3.7并行排序算法
3.7.1简单的串行排序算法
3.7.2并行奇偶交换排序
3.7.3mpi程序的安全性
3.7.4并行奇偶交换排序算法的重要内容
3.8小结
3.9习题
3.10编程作业
第4章用pthreads进行共享内存编程
4.1进程、线程和pthreads
4.2“hello,world”程序
4.2.1执行
4.2.2准备工作
4.2.3启动线程
4.2.4运行线程
4.2.5停止线程
4.2.6错误检查
4.2.7启动线程的其他方法
4.3矩阵-向量乘法
4.4临界区
4.5忙等待
4.6互斥量
4.7生产者-消费者同步和信号量
4.8路障和条件变量
4.8.1忙等待和互斥量
4.8.2信号量
4.8.3条件变量
4.8.4pthreads路障
4.9读写锁
4.9.1链表函数
4.9.2多线程链表
4.9.3pthreads读写锁
4.9.4不同实现方案的性能
4.9.5实现读写锁
4.10缓存、缓存一致性和伪共享
4.11线程安全性
4.12小结
4.13习题
4.14编程作业
第5章用openmp进行共享内存编程
5.1预备知识
5.1.1编译和运行openmp程序
5.1.2程序
5.1.3错误检查
5.2梯形积分法
5.3变量的作用域
5.4归约子句
5.5parallel for指令
5.5.1警告
5.5.2数据依赖性
5.5.3寻找循环依赖
5.5.4π值估计
5.5.5关于作用域的更多问题
5.6更多关于openmp的循环:排序
5.6.1冒泡排序
5.6.2奇偶变换排序
5.7循环调度
5.7.1schedule子句
5.7.2static调度类型
5.7.3dynamic和guided调度类型
5.7.4runtime调度类型
5.7.5调度选择
5.8生产者和消费者问题
5.8.1队列
5.8.2消息传递
5.8.3发送消息
5.8.4接收消息
5.8.5终止检测
5.8.6启动
5.8.7atomic指令
5.8.8临界区和锁
5.8.9在消息传递程序中使用锁
5.8.10critical指令、atomic指令、锁的比较
5.8.11经验
5.9缓存、缓存一致性、伪共享
5.10线程安全性
5.11小结
5.12习题
5.13编程作业
第6章并行程序开发
6.1n体问题的两种解决方法
6.1.1问题
6.1.2两个串行程序
6.1.3并行化n体算法
6.1.4关于i/o
6.1.5用openmp并行化基本算法
6.1.6用openmp并行化简化算法
6.1.7评估openmp程序
6.1.8用pthreads并行化算法
6.1.9用mpi并行化基本算法
6.1.10用mpi并行化简化算法
6.1.11mpi程序的性能
6.2树形搜索
6.2.1递归的深度优先搜索
6.2.2非递归的深度优先搜索
6.2.3串行实现所用的数据结构
6.2.4串行实现的性能
6.2.5树形搜索的并行化
6.2.6采用pthreads实现的静态并行化树搜索
6.2.7采用pthreads实现的动态并行化树搜索
6.2.8pthreads树搜索程序的评估
6.2.9采用openmp实现的并行化树搜索程序
6.2.10openmp实现的性能
6.2.11采用mpi和静态划分来实现树搜索
6.2.12采用mpi和动态划分来实现树搜索
6.3忠告
6.4选择哪个api
6.5小结
6.5.1pthreads和openmp
6.5.2mpi
6.6习题
6.7编程作业
第7章接下来的学习方向
参考文献
索引
信息通信网络是对包括电信网络、计算机网络和新一代网络等在内的各类网络的总称。本书对这些网络在系统层面上就它们的基本概念、
《官渡杀人事件》内容简介:作品改编自马伯庸短篇小说集《三国配角演义》中的《官渡杀人事件》。建安六年,“官渡之战”主公曹操大
——这是本会让你震撼且爱不释手的平面设计典藏书籍由hesignPublisher推出的《国际平面设计师一百单八将》,收录来自世界各地的1
朝仓直巳,1929年生,东京教育大学艺术系(构成专业)毕业。图形设计师。京都教育大学副教授、东京教育大学教授、筑波大学教授、
《Python 3面向对象编程(第2版)》内容简介:本书主要介绍如何使用Python3进行面向对象编程。第1~4章介绍面向对象这一编程范式的
《俄罗斯一本就Go(全彩珍藏版)》内容简介:随着国民收入的不断提高,出国旅游已成为了一种时尚。走出国门,放松心情,感受异域风
《撕掉单词语法书,英语就该这样学》内容简介:一遍遍地默写单词,却还是记不住; 一页页地刷语法题,考试时还是错; 阅读任何英文
《进化:顶级企业家自述40年成长心法》内容简介:改革开放是是一次觉醒与长征,是中国近代史的里程碑。一个国家在四十年中风雨前行
《实现技术创新的TRIZ诀窍:40个创新原理》是阿奇舒勒用来介绍如何使用40个创新原理解决技术矛盾的。本版保留了原著的核心部分和尤
C语言参悟之旅 本书特色 全书共分11章,系统详尽地介绍了c语言程序设计的基本方法,主要包括程序设计与c语言概述,数据及数据类型,运算符、表达式和语句,流程控制...
《心学之思》内容简介:有关王阳明研究的一部佳作。作者从一个新的视野出发,对阳明心学展开多维度的阐释,思路开阔,创见颇多,具
《大师之路:Photoshop中文版完全解析》以介绍Photoshop选区、图层、路径3大基础为主线,从色彩原理入手,注重基础知识,辅以大量
《手把手教你画素描——石膏几何体》内容简介:素描到底应怎样画?什么才是正确、规范的绘画步骤?绘画初学者与自学者一定会存在类
Pro/Engineer Wildfire3.0基础设计与实践-(含光盘) 本书特色 本书首先以机械零件的建立为例提出问题,然后结合建模理论分析问题,再通过建模...
C++程序设计 本书特色 《C++程序设计》是谭浩强教授的又一力作,依据C++标准进行介绍,引导学生学习标准C++,而不仅学习依赖于某一特定环境下的“方言化”的...
《多面的制度:跨学科视野下的制度研究》内容简介:从三皇五帝到品秩爵位,从中央集权到地方自治,从自上而下到自下而上,从正式规
《3GPP核心网技术》从网络结构、关键技术以及业务的角度,对3GPP组织制定的第三代移动通信系统WCDMA的核心网演进、核心网结构、核
【有关家居的一期】2014年KINFOLK春季刊旨在探究“家的意义”。比如,家的理想模样,因人而异的家居布置风格以及美好的家所共享的
劳伦斯·莱斯格的著作《代码》问世便震动了学界和业界,被人称为“也许是迄今为止互联网领域最重要的书籍”,也被一些学者称为“
《志虑心物》内容简介:本书收录了季羡林先生关于人生、治学、生活等方面的文章,从中可以窥见国学大师的生活态度,耄耋老人的人生