计算机类教材 > 软件工程
并行计算与程序设计(第二版)
书号:9787113307080 套系名称:普通高等院校“十四五”计算机类专业系列教材
作者:刘其成 出版日期:2024-01-01
定价:36.00 页码 / 开本: /16
策划编辑:贾星 责任编辑:贾星 彭立辉
适用专业:计算机类 适用层次:高等教育
最新印刷时间:2024-01-01
资源下载
教学课件(暂无)
教学素材(暂无)
习题答案(暂无)
教学案例(暂无)
教学设计(暂无)
教学视频(暂无)
内容简介
前言
目录
作者介绍
图书特色
本书是“普通高等院校‘十四五’计算类专业系列教材”之一,对并行计算的理论知识和并行程序设计方法进行了系统的论述,包括并行计算基本概念、并行计算机基础、并行计算模型、并行算法设计基础、并行计算性能评测、OpenMP多线程并行程序设计、MPI消息传递并行程序设计、Java多线程并行程序设计、Python并行程序设计、大数据分布式计算等内容。 本书集作者多年的教学经验编写而成,在论述并行计算理论知识的基础上,特别注重并行程序设计的实践方法及实用性。书中含有大量精心设计并调试通过的程序实例,以方便读者参考。 本书适合作为普通高等院校计算机科学与技术专业、软件工程专业以及计算机类相关专业本科生和研究生的教材,也可作为社会培训教材或软件开发人员的参考书。 ?
中国共产党第二十次全国代表大会提出:“实施科教兴国战略,强化现代化建设人才支撑。”“教育、科技、人才是全面建设社会主义现代化国家的基础性、战略性支撑。”“我们要坚持教育优先发展、科技自立自强、人才引领驱动,加快建设教育强国、科技强国、人才强国,坚持为党育人、为国育才,全面提高人才自主培养质量,着力造就拔尖创新人才,聚天下英才而用之。”如何研发自己的超级计算机,如何做到用国产软件替代国外软件,是我国科技领域的当务之急。 本书紧密结合普通高等院校并行计算课程的教学要求,面向高等院校计算机科学与技术、软件工程等专业学生和从事软件开发以及相关领域的工程技术人员,在充分考虑普通高等院校学生实际情况的基础上,覆盖并行计算课程要求的知识单元和知识点。 本书遵循由浅入深、循序渐进的原则,特别考虑了普通高等院校本科学生的实际理解和接受能力。与以往许多相关教材以理论为主不同,本书突出实用性,将复杂的理论融于具体的实例和程序中。书中的实例经过精心设计挑选,程序代码已认真调试,可以直接运行,为读者理解和使用提供了方便。同时,本书注重培养学生的自学能力和获取知识的能力。在编写过程中,力图在内容编排、叙述方法上为教师留有发挥空间的同时,也为学生留下自学空间。 本书在第一版基础上,主要做了如下修订工作:将第一版的第8章删除,将第一版的第9章改为第8章;新增加了第9章和第10章;对其他章节进行了补充和修订。全书共分10章:第1章论述并行计算和并行程序设计的基础知识;第2章论述并行计算机的体系结构、并行计算机的分类,以及多核技术和GPU技术;第3章论述并行计算模型的概念,以及PRAM、LogP和BSP模型;第4章论述并行算法的设计方法、过程和技术;第5章论述并行系统的性能分析方法、并行系统可扩展性度量指标;第6章论述OpenMP主要编译指导语句、OpenMP主要运行时库函数、OpenMP主要环境变量、OpenMP多线程程序性能分析;第7章论述MPI消息传递接口及MPICH实现、MPI编程基础、MPI通信;第8章论述Java线程的相关知识、Java Runnable接口与Thread类实现多线程的方法,以及Java解决线程同步与死锁的方法;第9章论述Python多进程并行程序设计、Python GPU并行程序设计及其应用;第10章阐释了Hadoop分布式计算平台、MapReduce分布式并行编程模型、Spark分布式计算框架。 本书由刘其成任主编,刘霄任副主编,具体编写分工如下:刘霄编写第2章,刘其成编写其余章节,并负责设计全书结构及统稿工作。 在本书的编写过程中,参阅了大量书籍和其他相关资料,在此向这些资料的作者表示衷心感谢。 尽管书稿几经修改,但由于编者学识有限,书中难免存在疏漏与不当之处,恳请各位同仁、读者不吝赐教。 编 者 2023年7月?
第1章 概述 1 1.1 实例 1 1.1.1 求和 1 1.1.2 泡茶问题 2 1.1.3 图书馆新书上架 2 1.1.4 天气预报 3 1.1.5 HPCC计划 3 1.1.6 教务管理系统 3 1.1.7 地球物理石油勘探数据处理系统 4 1.2 并行计算基础知识 5 1.2.1 并行计算的重要性 5 1.2.2 并行计算的定义、并行计算机系统及软件 6 1.2.3 并行计算的应用分类 6 1.2.4 并行设计的方法 7 1.2.5 应用系统的并行性 8 1.2.6 并行计算的研究内容 8 1.3 并行程序设计策略和模型 9 1.3.1 并行程序设计策略 9 1.3.2 并行程序设计模型 9 1.4 相关概念 10 1.4.1 顺序、并发与并行 10 1.4.2 进程和线程 11 1.4.3 一些基本概念 12 习题 13 第2章 并行计算机基础 14 2.1 并行计算机体系结构 14 2.1.1 结点 15 2.1.2 互联网络 15 2.1.3 并行计算机访存模型 19 2.2 并行计算机的分类 20 2.2.1 并行计算机的控制结构 20 2.2.2 地址空间 21 2.2.3 并行计算机系统结构模型 21 2.3 多核技术 28 2.3.1 多核芯片 28 2.3.2 片上多核处理器体系结构 28 2.3.3 超线程技术 29 2.3.4 基于多核的软件开发 30 2.3.5 虚拟化技术 30 2.4 GPU技术 30 2.4.1 简介 30 2.4.2 GPU与并行计算 31 习题 32 第3章 并行计算模型 33 3.1 并行计算模型概述 33 3.1.1 串行计算模型与并行计算模型 33 3.1.2 并行计算模型与并行算法 33 3.1.3 并行计算模型与并行系统中其他模型的关系 34 3.2 PRAM模型 34 3.2.1 基本PRAM模型 34 3.2.2 实例 35 3.3 BSP模型 36 3.3.1 BSP模型原理 36 3.3.2 实例 37 3.4 LogP模型 38 3.4.1 LogP模型原理 38 3.4.2 实例 38 3.5 并行计算模型比较 39 3.5.1 PRAM模型和LogP模型的比较 39 3.5.2 BSP模型和LogP模型的比较 39 习题 40 第4章 并行算法设计基础 41 4.1 并行算法设计方法 41 4.1.1 基本方法 41 4.1.2 实例 42 4.2 并行算法设计过程 44 4.2.1 PCAM设计方法学 45 4.2.2 划分 45 4.2.3 通信 47 4.2.4 组合 49 4.2.5 映射 51 4.3 并行算法设计技术 52 4.4 求和问题的并行算法设计 53 习题 54 第5章 并行计算性能评测 55 5.1 基本概念 55 5.1.1 运行时间 55 5.1.2 问题规模 56 5.1.3 额外开销函数 56 5.2 并行系统的性能分析 58 5.2.1 加速比 58 5.2.2 效率 62 5.2.3 开销 63 5.2.4 粒度和数据映射对性能的影响 63 5.2.5 实例 64 5.3 并行系统的可扩展性度量 64 5.3.1 可扩展性 64 5.3.2 度量指标 66 5.3.3 实例 68 习题 69 第6章 OpenMP多线程并行程序设计 70 6.1 OpenMP编程基础 70 6.1.1 OpenMP多线程编程模型 70 6.1.2 OpenMP程序结构 71 6.1.3 使用Microsoft Visual Studio.NET编写OpenMP程序 72 6.2 编译指导语句 73 6.2.1 并行域结构——parallel指令 74 6.2.2 共享任务结构 75 6.2.3 同步结构 82 6.2.4 数据处理子句 87 6.3 运行时库函数 96 6.3.1 基本函数 96 6.3.2 运行时库函数的互斥锁支持 97 6.4 环境变量 99 6.5 实例 99 6.5.1 求和 99 6.5.2 数值积分 103 6.6 OpenMP多线程程序性能分析 108 6.6.1 并行额外开销 108 6.6.2 线程同步带来的开销 110 6.6.3 负载均衡 111 6.6.4 OpenMP中的任务调度 113 习题 119 第7章 MPI消息传递并行程序设计 121 7.1 消息传递接口 121 7.1.1 简介 121 7.1.2 MPI程序特点 121 7.2 典型MPI实现——MPICH 123 7.2.1 简介 123 7.2.2 MPICH的安装和配置 123 7.3 MPI编程基础 127 7.3.1 简单的MPI程序示例 127 7.3.2 MPI程序的4个基本函数 128 7.3.3 统计时间 128 7.3.4 错误管理 128 7.4 MPI的点对点通信 129 7.4.1 点对点通信的例子 129 7.4.2 MPI_Send()函数 130 7.4.3 MPI_Recv()函数 130 7.4.4 消息管理七要素 131 7.4.5 非阻塞通信 133 7.5 MPI群集通信 133 7.5.1 一对多群集通信函数 133 7.5.2 多对一群集通信函数 134 7.5.3 多对多群集通信函数 135 7.5.4 同步函数 136 7.6 实例 137 7.6.1 求和 137 7.6.2 数值积分 138 习题 139 第8章 Java多线程并行程序设计 140 8.1 线程 140 8.1.1 基本概念 140 8.1.2 线程的状态与生命周期 141 8.1.3 线程调度与优先级 142 8.2 Runnable接口与Thread类 142 8.2.1 Runnable接口 142 8.2.2 Thread类 142 8.3 多线程的实现 144 8.3.1 创建Thread类的子类 144 8.3.2 实现Runnable接口 147 8.3.3 两种方法的比较 147 8.4 线程的同步与死锁 150 8.4.1 线程同步 150 8.4.2 线程死锁 156 8.5 实例 156 8.5.1 求和 156 8.5.2 数值积分 159 习题 161 第9章 Python并行程序设计 162 9.1 Python多线程 162 9.2 Python多进程并行程序设计 163 9.2.1 Process类实现并行 163 9.2.2 Python多进程的通信 165 9.2.3 Python多进程的数据共享 167 9.2.4 进程间同步 169 9.2.5 进程池 169 9.2.6 实例 171 9.3 Python GPU并行程序设计 174 9.3.1 概述 174 9.3.2 常用函数 175 9.3.3 神经网络概述 179 9.3.4 实例 181 习题 183 第10章 大数据分布式计算 184 10.1 Hadoop分布式计算平台 184 10.2 MapReduce分布式并行编程模型 185 10.2.1 MapReduce模型简介 185 10.2.2 MapReduce工作流程 186 10.2.3 WordCount分析 188 10.2.4 MapReduce实例 189 10.3 Spark分布式计算框架 193 10.3.1 并行程序设计策略 193 10.3.2 Spark RDD基本操作 195 10.3.3 Spark应用程序实例 196 习题 197 参考文献 198 ?
刘其成,男,博士研究生,烟台大学计算机与控制工程学院教授,硕士生导师。专业方向为计算机应用。主授课程:软件设计与体系结构、Java面向对象程序设计、并行计算技术等。主编《软件设计与体系结构》、《软件体系结构与设计实用教程》、《并行计算与程序设计》、《Java程序设计基础》等多本教材。主持山东省自然科学基金、山东省教育厅科技计划项目。作为主要成员参与国家自然科学基金、山东省科技发展计划、山东省本科教学改革研究重点项目。发表学术论文几十篇,其中多篇被SCI/EI收录。获山东高等学校优秀科研成果奖三等奖。 ?
本书突出实用性,将复杂的理论融于具体的实例和程序中。书中的实例经过精心设计挑选,程序代码已认真调试,可以直接运行,为读者理解和使用提供了方便。?