本书全面涵盖了并行软件和硬件的方方面面,深入浅出地介绍如何使用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章接下来的学习方向
参考文献
索引
何为好设计?答案在于你如何定义“Good”,它是关于形式、功能、花费、价值,还是可持续性?Good是一个主观的词汇,本书介绍了许
《英语进阶周计划——词汇速记》内容简介:词汇记忆是英语学习的基础。如何快速记忆单词,是每一位英语学习者经常探索的问题。不仅
《齐梁皇室的佛教信仰与撰述》内容简介:兰陵萧氏作为齐梁皇室,在南朝的政治史、佛教史以及文学史上都有独特的位置,历来都是南北
《向NASA学工程师文化》内容简介:太空探索既是一个关于探索和发现的故事,也是一个关于领导力和团队合作的故事。本书深入探讨了NA
《人文知识与改错(英语专业八级考试培训教程)》内容简介:本书是针对专八考试人文知识与改错部分的专项辅导书。人文知识大致从英
《别害怕糖尿病》内容简介:《别害怕糖尿病》收集了作者在临床实践中与患者沟通时的常见问题。从糖尿病的诊断谈到治疗,从“三分治
《高可用MySQL(第2版)》内容简介:本书主要讲解真实环境下如何使用MySQL的复制、集群和监控特性,揭示MySQL可靠性和高可用性的方
《物理化学》是教育部“高等教育面向21世纪教学内容和课程体系改革计划”的研究成果,是面向21世纪课程教材。《物理化学》共5篇2
《德国哲学(2016年下半年卷)》内容简介:本书是由湖北大学哲学学院主办、湖北大学德国哲学研究所协办的专门研究德国哲学及相关问
《写给老板的法律课》内容简介:企业自从登记注册的那一刻,就与法律事务密不可分。这就对老板的法律知识储备、法律思维养成提出了
《文化南京》内容简介:本书拟从时间、空间和文化三个层面对南京进行深度解读,集中展示南京历史文化形象,总结南京历史文明的发展
《AI新基建》内容简介:与传统基建不同,新基建更注重数字化与智能化。而近几年,AI作为新一轮科技革命和产业转型的引领性技术,已
《C语言从入门到精通(第4版)》内容简介:本书以零基础入门为宗旨,用范例引导读者学习,深入浅出地介绍了C语言的相关知识和实战技
《诸子百家普及丛书(套装10册)》内容简介:本丛书以王志民教授主持承担的山东省齐文化传承创新示范区建设重大工程项目为基础。丛
《科学、技术与社会》丛书是我国学者经过多年研究所取得的一项重大的创新性成果。它不仅系统地探索和建构了独到的STS学科体系,而
《网络安全技术及应用实践教程(第3版)》内容简介:本书为常用网络安全基本知识和技术要点,以及同步实验与综合课程设计指导,包括
《方汉奇文集(增订版)》内容简介:《方汉奇文集》(增订版)收录了方先生半个多世纪的研究成果和心得,史料丰富、考据严谨、笔法
骇客 内容简介 本书介绍了游戏设计、动画设计的基本知识、要素等,并展示了一些设计作品,供读者参考。骇客 目录 CYBER CONNECT公司主页欢迎来到CYBE...
《电脑时代的先锋》内容简介:人类学家玛格丽特·米德认为,人类发展的历史将经历三种不同的文化:前喻文化是后代人必须向前代人
《经典密码学与现代密码学》主要从三个方面来介绍密码学的知识:第一部分介绍了经典密码学的经典问题,包括单码加密法、仿射加密