| 作者 |
| [美] 托马斯·斯特林(Thomas Sterling) 马修·安德森(Matthew Anderson) 马切伊·布罗多维茨(Maciej Brodowicz) (美)伊戈尔·卢布希斯(Igor Ljubuncic) |
| 丛书名 |
| 高性能计算技术丛书 |
| 出版社 |
| 机械工业出版社 |
| ISBN |
| 9782004091714 |
| 简要 |
| 简介 |
| 内容简介书籍计算机书籍 ---------------------------高性能计算:现代系统与应用实践--------------------------- 本书内容全面且易学易懂,不仅涵盖高性能计算的基础概念和知识点,同时重视核心技能的培养。通过阅读本书:资深研究者将学习如何将超级计算机作为寻求新知识的重要工具;新手工程师将体验超级计算机如何运用高性能计算系统和方法来设计和模拟创新产品;学生将会了解未来高性能计算研究和开发的可能方向,为职业生涯做好准备;商用集群的维护和管理者将在掌握高性能计算系统的功能的基础上,学习如何更好地使用它们。 ---------------------------高性能计算的问题解决之道:Linux态势感知方法、实用工具及实践技巧--------------------------- 本书由Intel架构师撰写,创造性地采用Linux态势感知方法来解决高性能计算的问题,涵盖技术、监控和配置管理等多个方面。书中针对大规模数据中心、云平台架构和高性能计算环境,建立了一套基于统计工程和实验设计的方法论,从识别问题和理解问题,到再现问题和解决问题,一步一步地排除故障,形成了一套高效的工作流程。书中包含大量实战案例和代码,并介绍了不同工具的使用技巧,适合从事高性能计算相关工作的技术人员和管理人员参考。 |
| 目录 |
---------------------------高性能计算:现代系统与应用实践--------------------------- 译者序 序言 前言 致谢 第1章 绪论 1 1.1 高性能计算学科 2 1.1.1 定义 3 1.1.2 应用程序 3 1.1.3 性能和指标 3 1.1.4 高性能计算系统 4 1.1.5 超算问题 6 1.1.6 应用编程 7 1.2 超算对科学、社会和安全的影响 8 1.2.1 促进欺诈检测和市场数据分析 8 1.2.2 发现、管理和分配石油和天然气 8 1.2.3 加快制造业的创新 9 1.2.4 个性化医药和药物发现 9 1.2.5 预测自然灾害和了解气候变化 10 1.3 超级计算机剖析 11 1.4 计算机性能 13 1.4.1 性能 13 1.4.2 峰值性能 13 1.4.3 持续性能 14 1.4.4 可扩展性 15 1.4.5 性能退化 15 1.4.6 性能提升 17 1.5 超级计算机简史 17 1.5.1 第一个阶段—利用机械技术的自动计算机 18 1.5.2 第二个阶段—真空管时代的冯·诺依曼架构 19 1.5.3 第三个阶段—指令级并行 23 1.5.4 第四个阶段—向量处理和积分 24 1.5.5 第五个阶段—单指令多数据阵列 27 1.5.6 第六个阶段—顺序处理器的通信和超大规模集成电路 27 1.5.7 第七个阶段—多核和千万亿次 30 1.5.8 新数字时代和超越摩尔定律 30 1.6 作为学生的指南和工具 31 1.7 本章小结及成果 32 1.8 练习 33 参考文献 34 第2章 HPC架构:系统和技术 35 2.1 引言 35 2.2 HPC架构的关键特性 36 2.2.1 速度 36 2.2.2 并行性 36 2.2.3 效率 37 2.2.4 功率 37 2.2.5 可靠性 38 2.2.6 可编程性 38 2.3 并行架构家族—弗林分类法 39 2.4 支持技术 41 2.4.1 技术阶段 41 2.4.2 技术的角色 44 2.4.3 数字逻辑 45 2.4.4 存储技术 47 2.5 冯·诺依曼顺序处理器 50 2.6 向量和流水线 52 2.6.1 流水线并行 53 2.6.2 向量处理 55 2.7 单指令多数据阵列 56 2.7.1 单指令多数据架构 56 2.7.2 阿姆达定律 57 2.8 多处理器 59 2.8.1 共享内存多处理器 60 2.8.2 大规模并行处理器 62 2.8.3 商品集群系统 62 2.9 异构计算机结构 63 2.10 本章小结及成果 64 2.11 练习 65 参考文献 67 第3章 商品集群 68 3.1 引言 68 3.1.1 商品集群的定义 68 3.1.2 集群的动机和理由 69 3.1.3 集群元素 70 3.1.4 对500强名单的影响 70 3.1.5 简史 71 3.1.6 章节指南 73 3.2 Beowulf集群项目 74 3.3 硬件架构 76 3.3.1 节点 76 3.3.2 系统区域网络 77 3.3.3 辅助存储 78 3.3.4 商业系统摘要 78 3.4 编程接口 78 3.4.1 高性能计算程序设计语言 78 3.4.2 并行编程模式 80 3.5 软件环境 80 3.5.1 操作系统 80 3.5.2 资源管理 82 3.5.3 调试器 83 3.5.4 性能分析 84 3.5.5 可视化 85 3.6 基本使用方法 86 3.6.1 登录 86 3.6.2 用户空间和系统 87 3.6.3 包的配置和构建 92 3.6.4 编译器和编译 93 3.6.5 运行应用程序 94 3.7 本章小结及成果 94 3.8 练习 95 参考文献 95 第4章 基准测试程序 97 4.1 引言 97 4.2 HPC基准测试程序的关键属性 100 4.3 标准的HPC社区的基准测试程序 101 4.4 高度并行计算的Linpack 102 4.5 HPC挑战基准测试套件 104 4.6 高性能共轭梯度 106 4.7 NAS并行基准测试程序 110 4.8 Graph500 111 4.9 小型应用作为基准测试程序 115 4.10 本章小结及成果 116 4.11 练习 117 参考文献 118 第5章 资源管理的基础 119 5.1 资源管理 119 5.2 SLURM的基础 123 5.2.1 架构概述 123 5.2.2 工作负载的组织 124 5.2.3 SLURM调度 125 5.2.4 SLURM命令概要 127 5.2.5 SLURM作业脚本 141 5.2.6 SLURM速查表 146 5.3 便携式批量系统基础 147 5.3.1 PBS概述 147 5.3.2 PBS架构 148 5.3.3 PBS命令概要 148 5.3.4 PBS作业脚本 158 5.3.5 PBS速查表 160 5.4 本章小结及成果 161 5.5 练习 162 参考文献 163 第6章 对称多处理器架构 164 6.1 引言 164 6.2 架构概览 165 6.3 阿姆达定律 168 6.4 处理器核心的架构 171 6.4.1 执行流水线 172 6.4.2 指令级并行 173 6.4.3 分支预测 173 6.4.4 直通 174 6.4.5 保留站 174 6.4.6 多线程 174 6.5 存储层次 175 6.5.1 数据重用和局部性 175 6.5.2 存储层次结构 176 6.5.3 存储系统的性能 178 6.6 PCI总线 180 6.7 外部I/O接口 184 6.7.1 网络接口控制器 184 6.7.2 串行高级技术附件 185 6.7.3 JTAG 187 6.7.4 通用串行总线 189 6.8 本章小结及成果 190 6.9 练习 191 参考文献 192 第7章 OpenMP的基础 194 7.1 引言 194 7.2 OpenMP编程模型概览 195 7.2.1 线程并行 195 7.2.2 线程变量 197 7.2.3 运行时库与环境变量 197 7.3 并行线程和循环 199 7.3.1 并行线程 199 7.3.2 私有 200 7.3.3 并行“for”语句 200 7.3.4 块 206 7.4 同步 208 7.4.1 临界同步指令 208 7.4.2 master指令 209 7.4.3 barrier指令 210 7.4.4 single指令 210 7.5 归约 210 7.6 本章小结及成果 212 7.7 练习 213 参考文献 214 第8章 MPI的基础 215 8.1 引言 215 8.2 消息传递接口标准 216 8.3 消息传递接口的基本命令 217 8.3.1 mpi.h 217 8.3.2 MPI_Init 217 8.3.3 MPI_Finalize 218 8.3.4 消息传递接口例子—Hello World 218 8.4 通信器 219 8.4.1 size 220 8.4.2 rank 220 8.4.3 例子 221 8.5 点对点消息 222 8.5.1 MPI发送 222 8.5.2 消息传递接口的数据类型 222 8.5.3 MPI接收 223 8.5.4 例子 223 8.6 同步聚合 225 8.6.1 聚合调用概览 225 8.6.2 栅栏同步 225 8.6.3 例子 226 8.7 通信聚合 227 8.7.1 聚合数据移动 228 8.7.2 广播 230 8.7.3 分散 231 8.7.4 收集 233 8.7.5 全局收集 234 8.7.6 归约操作 235 8.7.7 全局到全局 238 8.8 非阻塞式点对点通信 240 8.9 用户自定义数据类型 242 8.10 本章小结及成果 243 8.11 练习 244 参考文献 244 第9章 并行算法 245 9.1 引言 245 9.2 分支-聚合 246 9.3 分治 247 9.4 管理者-工作者 249 9.5 易并行 250 9.6 光环交换 251 9.6.1 使用有限差分的平流方程 251 9.6.2 稀疏矩阵向量乘法 254 9.7 置换:佳能算法 256 9.8 任务数据流:广度优先搜索 261 9.9 本章小结及成果 263 9.10 练习 263 参考文献 264 第10章 库 265 10.1 引言 265 10.2 线性代数 267 10.2.1 基本线性代数子程序库 267 10.2.2 线性代数包 273 10.2.3 可扩展的线性代数包 275 10.2.4 GNU科学库 276 10.2.5 Supernodal LU 276 10.2.6 用于科学计算的便携式可扩展工具包 277 10.2.7 用于特征值问题计算的可扩展库 277 10.2.8 千万亿运算级的应用的特征值求解器 278 10.2.9 Hypre:可扩展的线性求解器和多重网格方法 278 10.2.10 用于线性代数的领域特定语言 278 10.3 偏微分方程 280 10.4 图算法 281 10.5 并行输入/输出 281 10.6 网格分解 288 10.7 可视化 289 10.8 并行化 289 10.9 信号处理 289 10.10 性能监控 290 10.11 本章小结及成果 290 10.12 练习 291 参考文献 292 第11章 操作系统 294 11.1 引言 294 11.2 操作系统结构和服务 296 11.2.1 系统组件 296 11.2.2 进程管理 296 11.2.3 内存管理 296 11.2.4 文件管理 296 11.2.5 I/O系统管理 297 11.2.6 辅助存储管理 297 11.3 进程管理 297 11.3.1 进程状态 298 11.3.2 进程控制块 299 11.3.3 进程管理活动 300 11.3.4 调度 301 11.4 线程 302 11.5 内存管理 304 11.5.1 虚拟内存 304 11.5.2 虚拟页地址 304 11.5.3 虚拟地址转换 305 11.6 本章小结及成果 306 11.7 练习 307 第12章 可视化 308 12.1 引言 308 12.2 基本的可视化概念 308 12.3 Gnuplot 310 12.4 Matplotlib 312 12.5 可视化工具包 316 12.6 ParaView 323 12.7 VisIt 323 12.8 本章小结及成果 324 12.9 练习 325 参考文献 325 第13章 性能监控 326 13.1 引言 326 13.2 时间测量 327 13.3 性能分析 333 13.3.1 应用分析的重要性 333 13.3.2 gperftools基础 334 13.4 监控硬件事件 339 13.4.1 perf 339 13.4.2 性能应用程序编程接口 344 13.5 集成的性能监控套件 347 13.6 分布式环境下的分析 350 13.7 本章小结及成果 356 13.8 练习 357 参考文献 358 第14章 调试 360 14.1 引言 360 14.2 工具 362 14.2.1 GNU调试器 362 14.2.2 Valgrind 370 14.2.3 商业版并行调试器 370 14.3 调试OpenMP示例:访问不受保护的共享变量 372 14.4 调试MPI示例:死锁 373 14.5 用于调试的编译器标志 378 14.6 帮助调试的系统监控器 379 14.7 本章小结及成果 381 14.8 练习 381 参考文献 385 第15章 加速器架构 386 15.1 引言 386 15.2 简史 388 15.2.1 协处理器 390 15.2.2 处理器I/O空间中的加速器 394 15.2.3 具备行业标准接口的加速器 395 15.3 图形处理单元简介 397 15.4 图形处理单元功能的进化 399 15.5 现代GPU体系结构 403 15.5.1 计算架构 403 15.5.2 内存实现 406 15.5.3 互连 407 15.5.4 可编程环境 408 15.6 异构系统架构 408 15.7 本章小结及成果 410 15.8 练习 410 参考文献 411 第16章 OpenACC的基础 412 16.1 引言 412 16.1.1 CUDA 413 16.1.2 OpenCL 414 16.1.3 C++ AMP 414 16.1.4 OpenACC 415 16.2 OpenACC编程概念 415 16.3 OpenACC库调用 417 16.4 OpenACC环境变量 419 16.5 OpenACC指令 420 16.5.1 并行构造 420 16.5.2 内核构造 422 16.5.3 数据管理 423 16.5.4 循环调度 427 16.5.5 变量的作用范围 429 16.5.6 原子性 430 16.6 本章小结及成果 431 16.7 练习 432 参考文献 433 第17章 大容量存储器 434 17.1 引言 434 17.2 存储器简史 437 17.3 存储设备技术 438 17.3.1 硬盘驱动器 438 17.3.2 固态硬盘存储器 444 17.3.3 磁带 449 17.3.4 光存储 451 17.4 集中存储 456 17.4.1 独立磁盘冗余阵列 456 17.4.2 存储区域网络 462 17.4.3 网络附加存储 463 17.4.4 三级存储器 464 17.5 本章小结及成果 465 17.6 练习 466 参考文献 466 第18章 文件系统 468 18.1 文件系统的角色和功能 468 18.2 POSIX文件接口的基础 472 18.2.1 文件访问的系统调用 472 18.2.2 缓冲文件I/O 476 18.3 网络文件系统 480 18.4 通用并行文件系统 483 18.5 Lustre文件系统 487 18.6 本章小结及成果 492 18.7 练习 493 参考文献 494 第19章 MapReduce 495 19.1 引言 495 19.2 映射和归约 495 19.2.1 单词计数 496 19.2.2 共享的邻居 497 19.2.3 K均值聚类 498 19.3 分布式计算 499 19.4 Hadoop 500 19.5 本章小结及成果 503 19.6 练习 504 参考文献 504 第20章 检查点技术 505 20.1 引言 505 20.2 系统级检查点 505 20.3 应用级检查点 511 20.4 本章小结及成果 515 20.5 练习 516 参考文献 516 第21章 下一步和未来发展 517 21.1 引言 517 21.2 扩展的并行编程模型 518 21.2.1 消息传递接口的进展 518 21.2.2 OpenMP的进展 518 21.2.3 MPI+X 519 21.3 扩展的高性能计算架构 519 21.3.1 世界上最快的机器 519 21.3.2 轻量级架构 519 21.3.3 现场可编程门阵列 520 21.4 E级计算 521 21.4.1 E级计算的挑战 522 21.4.2 从数学角度看E级的大小 523 21.4.3 加速方法 523 21.4.4 轻量级核心 523 21.5 异步多任务 524 21.5.1 多线程 524 21.5.2 消息驱动的计算 524 21.5.3 全局地址空间 525 21.5.4 行动者同步 526 21.5.5 运行时系统软件 526 21.6 新数字时代 526 21.6.1 数据流 527 21.6.2 元胞自动机 529 21.6.3 仿神经计算 530 21.6.4 量子计算 530 21.7 练习 531 参考文献 531 附录A C语言的基础 532 附录B Linux的基础 547 ---------------------------高性能计算的问题解决之道:Linux态势感知方法、实用工具及实践技巧--------------------------- 译者序 前 言 致 谢 引言 数据中心与高端计算 1 数据中心一览 1 现代数据中心布局 1 欢迎来到BORG,抵抗是徒劳的 2 那就是力量 2 企业与Linux 2 经典的办公室 2 Linux计算环境 3 Linux云 3 10000个1不等于10000 3 问题的非线性扩展 3 大数定律 4 同质化 4 企业的当务之急 4 7天24小时全天候开放 5 任务危急 5 停机时间等于金钱 5 千里之堤溃于蚁穴 5 参考文献 5 第1章 你有问题吗 6 问题的识别 6 如果森林里有一棵树倒下,没人能听到 6 一步一步地识别 7 总是优先使用简单工具 7 过多的知识导致误区 9 问题的定义 9 当前发生或可能的问题 10 停机规模和严重性与业务需求 11 已知与未知 13 问题的再现 13 你能隔离问题吗 13 偶发性问题需要特殊处理 14 计划如何控制混乱 14 放手是最难的事 15 因与果 16 不要流连于症状 16 先有鸡还是先有蛋 16 严格控制环境改变,直到你理解了问题的本质 18 如果改变,确保你知道预期结果是什么 18 结论 19 参考文献 19 第2章 开始研究 20 隔离问题 20 推动从生产到测试 20 重新运行获得结果所需的最小集 21 忽略偏见信息,避免假设 21 与健康系统和已知参考的比较 22 那不是程序错误,而是一个特性 22 将预期结果与正常系统作比较 23 性能和行为的参考是必需的 24 对变化的线性与非线性响应 24 一次一个变量 25 线性复杂度的问题 25 非线性问题 25 响应可能会延迟或掩盖 25 Y到X而不是X到Y 26 组件搜索 26 结论 26 第3章 基础研究 27 刻画系统状态 27 环境监控 27 机器可访问性、响应性和正常 运行时间 27 本地和远程登录以及管理控制台 29 喊狼来了的监控 29 读取系统信息和日志 30 使用ps和top 30 系统日志 36 进程记账 39 检查命令执行的模式 40 与问题表现相关 41 避免快速的结论 41 统计作为辅助 41 vmstat 41 iostat 43 系统活动报告(SAR) 47 结论 49 参考文献 50 第4章 深入探讨系统 51 使用/proc 51 层次 52 每个进程的变量 52 内核数据 56 进程空间 60 检查内核可调参数 63 sys子系统 63 内存管理 64 文件系统管理 65 网络管理 65 SunRPC 66 内核 67 sysctl 69 结论 70 参考文献 70 第5章 变身极客——跟踪和调试应用 72 使用strace和ltrace 72 strace 72 ltrace 86 结合两种工具获得最佳结果 87 其他工具 90 使用perf 93 介绍 93 为什么不用OProfile 94 前提 94 基本使用 94 基础实例 99 高级实例 103 小结 107 使用gdb 107 介绍 107 前提 108 简单实例 108 不那么简单的实例 113 其他有用的命令 122 结论 124 参考文献 124 第6章 极客进级——应用和内核核心、内核调试器 126 收集应用核心 126 如何转储应用核心 127 收集内核核心(Kdump) 132 Kdump服务概览 133 Kdump配置 137 测试配置 143 Kdump网络转储功能 145 Kdump使用 146 小结 147 崩溃分析(crash) 147 前提 147 运行crash 148 内核崩溃核心分析 156 超级极客技能:C代码分析 167 小例子 168 中级例子 172 困难的例子 176 内核崩溃的bug报告 182 崩溃分析结果 184 内核bug与硬件错误 185 小结 186 内核调试器 186 内核编译 186 进入调试器 187 基本命令 187 小结 189 结论 189 参考文献 189 第7章 问题的解决方案 191 如何处理收集到的数据 191 文档 191 数据的杂乱 193 最佳实践 195 搜索引擎、邮件列表以及供应商支持 202 找到根本原因 203 消除问题 204 实现和跟踪 206 结论 207 参考文献 208 第8章 监控和预防 209 监控什么数据 209 过多的数据比没有数据更糟 209 Y到X将定义你所需要的监控 210 不要害怕改变 210 如何监控和分析趋势 211 设置你关心的监控 211 监控不等于报告 212 不监控随机指标 212 定义数学趋势 213 如何应对趋势 215 当它来得太晚 216 内务管理 217 预防是解决问题的关键 217 配置审核 218 为什么审核有用 218 控制环境的变化 219 安全方面 219 系统数据收集工具 219 定制工具 220 商业支持 220 结论 221 参考文献 221 第9章 让你的环境更安全、更健壮 222 版本控制 222 为什么需要版本控制 222 Subversion、Git及相关软件 223 简单回滚 223 配置管理 223 变懒:自动化 224 大环境下的熵 225 掌控混乱 225 配置管理软件 225 环境中引入变化的正确方法 226 一次一个变化 226 不要急着冲到截止时间 227 理解影响 228 没报告问题意味着什么都没有 228 连锁反应 228 结论 229 参考文献 229 第10章 微调系统性能 230 日志大小与日志轮转 230 系统日志会一直增长 230 慢点,倒带 232 确定消息的内容 232 文件系统调优 234 Ext3/4文件系统 234 XFS文件系统 235 sysfs文件系统 236 层次 236 block子系统 237 FS子系统 237 内核子系统 237 模块子系统 238 结合proc和sys 238 内存管理实例 238 CPU调度实例 238 网络优化实例 241 结论 243 参考文献 243 第11章 整合所有的部分 245 自上而下的方法 245 保持简单:从简单开始 245 首先理解环境 245 它就像洋葱:分层而且会使你流泪 246 “自我消失”的问题会重现,且 扩大影响 246 没有捷径:努力是金科玉律 246 使用的方法学 247 文档 247 一种清晰的方法 247 Y到X应该是座右铭 247 统计工程不受重视 248 数学是强大的,但没人用 248 使用的工具 248 使用的工具概述 248 所选工具的优缺点 249 从简单到复杂 249 不要过多涉猎:知识是你的敌人 249 逐步进阶的方法 249 不要害怕退步 250 有时你只需要缓解问题 250 操作约束 250 钱,钱,钱 250 你的客户永远无法忍受停机 250 你将不得不妥协 251 聪明的做法 251 分享就是关怀 251 请教别人:他们以前碰到过类似问题 252 工作安全根本没有安全可言 252 授人以鱼或者授人以渔 253 只有你知道什么对你而言是最好的 253 结论 253 |