《并行程序设计导论》全面涵盖了并行软件和硬件的方方面面,深入浅出地介绍如何使用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.1 Cache基础知识
2.2.2 Cache映射
2.2.3 Cache和程序:一个实例
2.2.4 虚拟存储器
2.2.5 指令级并行
2.2.6 硬件多线程
2.3 并行硬件
2.3.1 SIMD系统
2.3.2 MIMD系统
2.3.3 互连网络
2.3.4 Cache一致性
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.2 MPI程序
3.1.3 MPI_Init和MPI_Finalize
3.1.4 通信子、MPI_Comm_size和MPI_Comm_rank
3.1.5 SPMD程序
3.1.6 通信
3.1.7 MPI_Send
3.1.8 MPI_Recv
3.1.9 消息匹配
3.1.10 status_p参数
3.1.11 MPI_Send和MPI_Recv的语义
3.1.12 潜在的陷阱
3.2 用MPI来实现梯形积分法
3.2.1 梯形积分法
3.2.2 并行化梯形积分法
3.3 I/O处理
3.3.1 输出
3.3.2 输入
3.4 集合通信
3.4.1 树形结构通信
3.4.2 MPI_Reduce
3.4.3 集合通信与点对点通信
3.4.4 MPI_Allreduce
3.4.5 广播
3.4.6 数据分发
3.4.7 散射
3.4.8 聚集
3.4.9 全局聚集
3.5 MPI的派生数据类型
3.6 MPI程序的性能评估
3.6.1 计时
3.6.2 结果
3.6.3 加速比和效率
3.6.4 可扩展性
3.7 并行排序算法
3.7.1 简单的串行排序算法
3.7.2 并行奇偶交换排序
3.7.3 MPI程序的安全性
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.4 Pthreads路障
4.9 读写锁
4.9.1 链表函数
4.9.2 多线程链表
4.9.3 Pthreads读写锁
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.5 parallelfor指令
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.1 schedule子句
5.7.2 static调度类型
5.7.3 dynamic和guided调度类型
5.7.4 runtime调度类型
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.7 atomic指令
5.8.8 临界区和锁
5.8.9 在消息传递程序中使用锁
5.8.10 critical指令、atomic指令、锁的比较
5.8.11 经验
5.9 缓存、缓存一致性、伪共享
5.10 线程安全性
5.11 小结
5.12 习题
5.13 编程作业
第6章 并行程序开发
6.1 n体问题的两种解决方法
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.11 MPI程序的性能
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.8 Pthreads树搜索程序的评估
6.2.9 采用OpenMp实现的并行化树搜索程序
6.2.10 OpenMp实现的性能
6.2.11采用MPI和静态划分来实现树搜索
6.2.12 采用MPI和动态划分来实现树搜索
6.3 忠告
6.4 选择哪个API
6.5 小结
6.5.1 Pthreads和OpenMP
6.5.2 MPI
6.6 习题
6.7 编程作业
第7章 接下来的学习方向
参考文献
索引
《并行程序设计导论》给我的感觉是一本“有温度”的技术书籍。作者在讲解枯燥的技术概念时,并没有让它们显得生硬冰冷,而是用一种引人入胜的方式呈现出来。我尤其喜欢书中对于“并行思维”的培养的重视。作者反复强调,并行编程不仅仅是掌握一套语法或API,更是一种全新的思考方式。书中对数据并行和任务并行的区分,以及它们在不同场景下的应用,让我对如何将问题映射到并行计算模型有了更深的理解。我特别欣赏书中对并行程序性能评估和度量的讲解,它让我明白,在追求并行化的过程中,量化性能提升是至关重要的。作者提供的各种性能指标和分析方法,帮助我学会了如何客观地评估一个并行程序的优劣。虽然书中涉及的一些数学公式对于我来说需要一些时间去消化,但作者总是能够通过图示和文字描述,让这些公式背后的意义变得清晰可见。这本书就像是一位经验丰富的向导,带领我穿越并行计算的迷宫,让我看到了清晰的路径和远方的风景,极大地激发了我对这个领域的兴趣。
评分这本书的语言风格非常直接和实用,没有太多花哨的修辞,但每一句话都切中要害。对于我这种时间宝贵,希望快速掌握核心技能的读者来说,这简直是福音。书中对并行任务分解和通信机制的讲解,我觉得非常到位。作者通过一系列生动形象的比喻,将抽象的同步和互斥概念变得异常容易理解,让我不再对“竞态条件”感到恐惧。我喜欢书中对于并行计算过程中“隐藏的开销”的强调,比如线程创建和销毁的成本,以及通信的延迟,这些细节往往是导致并行程序性能不达预期的关键。作者在这方面的提醒,让我意识到在设计并行程序时,需要考虑的因素远比想象中要多。我对书中关于并行调试的介绍也印象深刻,作者分享了一些实用的调试技巧和工具,这对于解决复杂的并行问题非常有帮助。总的来说,这本书非常适合那些想要快速入门并行程序设计,并且希望掌握实操性技能的读者。它提供了一个坚实的基础,让你能够自信地开始编写你的第一个并行程序。
评分《并行程序设计导论》这本书,我断断续续地读了几个月,期间穿插着一些项目开发和实际操作,总算对书中描绘的并行世界有了初步的认识。这本书给我最深刻的印象是它的“导论”二字,它并没有试图将所有复杂的并行技术一股脑地灌输给你,而是像一位循循善诱的老师,一步一步地引导你进入这个领域。开篇对并行计算概念的阐释,虽然看似基础,却为后续内容的展开打下了坚实的地基。作者非常注重理论与实践的结合,在讲解抽象概念的同时,总会辅以清晰易懂的例子,这对于我这样初次接触并行编程的读者来说,无疑是极大的帮助。我尤其喜欢其中关于线程模型和进程模型对比的部分,通过生动的比喻,我很快就理解了它们之间的差异和各自的适用场景。书中对并行算法设计的基本原则的介绍,也让我开始思考如何将串行思维转化为并行思维,这是一种思维模式的转变,非常有挑战性,但也极具吸引力。虽然有些章节的篇幅相对较短,但它们所涵盖的核心思想却十分精炼,留下了很多让我深入思考的空间。总而言之,这本书为我打开了一扇了解并行计算的大门,让我看到了这个领域广阔的可能性。
评分这本《并行程序设计导论》的独特之处在于其对并行计算的“全局观”的构建。在阅读过程中,我感觉到作者并非只关注某个特定技术的细节,而是更着重于让读者建立起对整个并行计算生态系统的宏观理解。从底层硬件的并行特性,到上层软件的并行模型和编程范式,书中都给予了恰当的篇幅和深度。我尤其欣赏其中关于并行编程中的“性能调优”这一章节,作者没有仅仅罗列各种优化技巧,而是深入剖析了影响并行程序性能的根本原因,比如缓存一致性、内存带宽和通信开销。这种深入的分析让我能够从更本质的层面去理解性能瓶颈,并思考如何针对性地解决问题。书中关于不同并行编程模型(如共享内存模型和消息传递模型)的比较,也让我对如何根据具体应用场景选择合适的模型有了更清晰的判断。虽然某些概念的理解需要反复咀嚼,但作者始终保持着一种“由浅入深”的教学节奏,让我能够循序渐进地掌握知识。这本书不仅仅是一本技术书籍,更像是一本指导思想的书,它帮助我从一个全新的角度审视计算问题。
评分这本书简直就像是一次令人兴奋的思维探险!我原本对并行程序设计抱有一种既好奇又畏惧的态度,觉得它离我遥不可及,充满了各种复杂的数学公式和晦涩的理论。然而,当我翻开《并行程序设计导论》时,我发现我的顾虑完全是多余的。作者以一种极其友好的方式,将原本看似高深的概念拆解得清晰明了。我特别欣赏书中对不同并行架构的介绍,从多核处理器到分布式系统,每一部分都让我惊叹于计算机硬件的强大和设计的巧妙。书中对于并行化挑战的讨论,例如数据依赖、同步问题和负载均衡,也非常写实,让我看到了实际开发中可能遇到的坑,也让我对如何避免这些问题有了初步的认识。最让我印象深刻的是,作者并没有止步于理论的讲解,而是提供了大量的代码示例,并且这些示例都经过精心设计,能够有效地展示书中讲解的技术。我尝试着将其中一些代码在自己的环境中运行,并对其进行微调,这个过程让我对并行编程的理解更加深刻,也增强了我的信心。这本书让我觉得,并行程序设计并非高不可攀,只要掌握了正确的方法和思路,任何人都可以成为一名出色的并行程序员。
评分考研复试拿来用的 很好
评分书是好书,二星扣给翻译,翻译非常不负责任非常垃圾,得对照英文版才不会被带沟里。
评分很快
评分挺好的挺好的挺好的挺好的挺好的
评分很用用,对工作帮助很大
评分不错的书,讲得很基础,推荐
评分课本。
评分不错的图书,发货速度快,学习中。挺喜欢的。?
评分不错非常好,物流很快
本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度,google,bing,sogou 等
© 2025 book.teaonline.club All Rights Reserved. 图书大百科 版权所有