本书全面涵盖了并行软件和硬件的方方面面,深入浅出地介绍如何使用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章接下来的学习方向
参考文献
索引
《产品生命周期管理:21世纪企业制胜之道》主要内容:产品生命周期管理是当今制造企业重要的管理理念和方法,对提升我阳制造企业的
《核技术解读中医药千年奥秘》内容简介:本书为“走进美丽的核科学世界系列”之一,主要内容包括核医学成像、放射性药物、放射性核
《时与光》内容简介:这是一部像推理小说一样“烧脑”的科学史话。跟随书中的一个个智者,你将从古典力学走向经典体系,最终跨入理
SincedevelopmentfirstbeganonSpringin2003,theresbeenaconstantbuzzaboutitinJavadev...
《荷塘月色:朱自清精读》内容简介:《荷塘月色:朱自清精读》是“壹本”系列之一,从当下读者爱读、想读和需要读的角度,精选著名
“设计师能否满足房主的需求,设计出好住有好看的家?”“如何运用家居设计,让日常生活更方便?”“照片里那种好看的家,真的可
《当下的修行:要懂得一点放下》内容简介:其实,生活本该是一个轻松的课题,只是我们一直无法放下心中的累赘,将不该看重的东西看
《人文知识与改错(英语专业八级考试培训教程)》内容简介:本书是针对专八考试人文知识与改错部分的专项辅导书。人文知识大致从英
本书是《ACM图灵奖--计算机发展史的缩影》一书的姊妹篇。IEEE计算机先驱奖已经颁发了20届,共有108位计算机科学技术工作者获奖,
《家校合作共育:中国家庭教育的新趋势》内容简介:提升一个民族的家庭教育水平,不仅需要把握全国家庭教育的现状和特点,以判断其
Thelatestscientificfindingsindicatethatemotionsplayanessentialroleindecisionmaki...
《小小艺术大师·华夏版:与石涛探访桃花源》内容简介:石涛(1642—1708),本是明朝皇室子孙,却在改朝换代中被迫出家当了和尚。
“非常优秀!这绝对是UI设计模式领域最好的书,也是近年来交互设计领域最好的新书之一。本书清楚、简洁、引人入胜,既包括基础知
《随园食单》内容简介:本书出自乾隆才子、诗坛盟主的袁枚之手,是清代一部非常重要的美食名著。袁枚以随笔的形式,细腻地描摹了乾
Youdontneedprogrammingexperiencetoaddinteractiveandvisualeffectstoyourwebpageswi...
Cisco多业务交换网络 本书特色 服务提供高和大企业客户面对如何使用一个公共的基础设施提供不同的业务,以便网络之间不会互相干扰。多业务交换网络实现了这个目标。...
《区块链开发实战:实用案例分析》内容简介:第1章是概览章节,介绍区块链技术的基本理念。第2章首先通过创建一个客户友好型支付系
《功能主义的刑法解释》内容简介:在风险社会的背景下,刑法解释在方法论上面临转型的命题。为确保刑法体系与外部环境之间实现有效
Python是一种解释型、面向对象、动态数据类型的高级程序设计语言,自20世纪90年代初诞生至今,逐渐被广泛应用于处理系统管理任务
TheHuman-ComputerInteractionHandbook:Fundamentals,EvolvingTechnologies,andEmergi...