• 并行程序设计导论(原书第2版)
  • 并行程序设计导论(原书第2版)
  • 并行程序设计导论(原书第2版)
  • 并行程序设计导论(原书第2版)
  • 并行程序设计导论(原书第2版)
  • 并行程序设计导论(原书第2版)
21年品牌 40万+商家 超1.5亿件商品

并行程序设计导论(原书第2版)

全新正版 极速发货

94.33 7.3折 129 全新

库存3件

广东广州
认证卖家担保交易快速发货售后保障

作者[美]彼得·S. 帕切科(Peter S. Pacheco), [美]马修·马伦塞克(Matthew Malensek)

出版社机械工业

ISBN9787111743194

出版时间2024-05

装帧其他

开本其他

定价129元

货号32089380

上书时间2024-07-03

书香美美

已实名 已认证 进店 收藏店铺

   商品详情   

品相描述:全新
商品描述
作者简介
彼得·S.帕切科(PeterS.Pacheco)旧金山大学计算机科学荣休教授,曾任旧金山大学计算机系主任、数学系主任。之前曾为加州大学洛杉矶分校教授。他的主要研究方向是并行科学计算,包括电路仿真的并行软件开发、语音识别、模拟大规模神经元网络等。他拥有佛罗里达州立大学数学博士学位。<br/><br/>马修·马伦塞克(MatthewMalensek)旧金山大学计算机科学系助理教授。他的研究兴趣是数据科学的系统方法,重点是可扩展分析、海量数据流的存储和管理,以及云/边缘计算,这些项目涵盖大气科学、流行病学和地理信息系统等领域。他拥有科罗拉多州立大学计算机科学博士学位。<br/>

目录
目  录<br />An Introduction to Parallel Programming, Second Edition<br />译者序<br />前言<br />第1章 为什么需要并行计算1<br />1.1 为什么需要不断提高性能1<br />1.2 为什么需要建立并行系统2<br />1.3 为什么需要编写并行程序2<br />1.4 如何编写并行程序5<br />1.5 我们将做什么6<br />1.6 并发、并行和分布式7<br />1.7 本书其余部分8<br />1.8 一点警告8<br />1.9 排版惯例9<br />1.10 小结9<br />1.11 练习10<br />第2章 并行硬件与并行软件12<br />2.1 背景知识12<br />2.1.1 冯·诺依曼体系结构12<br />2.1.2 进程、多任务和线程13<br />2.2 冯·诺依曼模型的改进14<br />2.2.1 缓存基础14<br />2.2.2 缓存映射16<br />2.2.3 缓存和程序:示例17<br />2.2.4 虚拟内存18<br />2.2.5 指令级并行19<br />2.2.6 硬件多线程21<br />2.3 并行硬件22<br />2.3.1 并行计算机的分类22<br />2.3.2 SIMD系统22<br />2.3.3 MIMD系统24<br />2.3.4 互连网络26<br />2.3.5 高速缓存一致性30<br />2.3.6 共享内存与分布式内存32<br />2.4 并行软件33<br />2.4.1 注意事项33<br />2.4.2 协调进程/线程33<br />2.4.3 共享内存34<br />2.4.4 分布式内存37<br />2.4.5 GPU编程40<br />2.4.6 混合系统编程40<br />2.5 输入和输出41<br />2.5.1 MIMD系统41<br />2.5.2 GPU41<br />2.6 性能42<br />2.6.1 在MIMD系统中的加速比和<br />效率42<br />2.6.2 阿姆达定律44<br />2.6.3 MIMD系统的可扩展性45<br />2.6.4 MIMD程序的计时46<br />2.6.5 GPU性能48<br />2.7 并行程序设计49<br />2.7.1 示例49<br />2.8 编写和运行并行程序53<br />2.9 假设53<br />2.10 小结54<br />2.10.1 串行系统54<br />2.10.2 并行硬件55<br />2.10.3 并行软件56<br />2.10.4 输入和输出57<br />2.10.5 性能57<br />2.10.6 并行程序设计58<br />2.10.7 假设58<br />2.11 练习58<br />第3章 基于MPI的分布式<br />内存编程62<br />3.1 入门62<br />3.1.1 编译和执行63<br />3.1.2 MPI程序64<br />3.1.3 MPI_Init和<br />MPI_Finalize64<br />3.1.4 通信域、MPI_Comm_size和MPI_Comm_rank65<br />3.1.5 SPMD程序66<br />3.1.6 通信66<br />3.1.7 MPI_Send66<br />3.1.8 MPI_Recv67<br />3.1.9 消息匹配68<br />3.1.10 status_p参数69<br />3.1.11 MPI_Send和MPI_Recv的<br />语义69<br />3.1.12 一些潜在的陷阱70<br />3.2 MPI中的梯形法则70<br />3.2.1 梯形法则70<br />3.2.2 梯形法则的并行化71<br />3.3 处理I/O74<br />3.3.1 输出74<br />3.3.2 输入75<br />3.4 集合通信76<br />3.4.1 树形结构的通信76<br />3.4.2 MPI_Reduce77<br />3.4.3 集合通信与点对点通信78<br />3.4.4 MPI_Allreduce79<br />3.4.5 广播80<br />3.4.6 数据分布82<br />3.4.7 分散83<br />3.4.8 收集84<br />3.4.9 综合实例85<br />3.5 MPI派生的数据类型88<br />3.6 MPI程序的性能评估91<br />3.6.1 计时91<br />3.6.2 结果93<br />3.6.3 加速比和效率95<br />3.6.4 可扩展性95<br />3.7 一种并行排序算法96<br />3.7.1 一些简单的串行排序算法96<br />3.7.2 并行奇偶移项排序98<br />3.7.3 MPI程序中的安全性100<br />3.7.4 关于并行奇偶排序的一些<br />补充细节102<br />3.8 小结103<br />3.9 练习106<br />3.10 编程作业112<br />第4章 Pthreads共享内存编程114<br />4.1 进程、线程和Pthreads114<br />4.2 Hello, world115<br />4.2.1 执行116<br />4.2.2 预备117<br />4.2.3 启动线程117<br />4.2.4 运行线程119<br />4.2.5 停止线程120<br />4.2.6 错误检查120<br />4.2.7 启动线程的其他方法120<br />4.3 矩阵-向量乘法121<br />4.4 临界区123<br />4.5 忙等待126<br />4.6 互斥锁128<br />4.7 生产者-消费者同步和信号量131<br />4.8 栅栏和条件变量135<br />4.8.1 忙等待和互斥锁135<br />4.8.2 信号量136<br />4.8.3 条件变量137<br />4.8.4 Pthreads栅栏139<br />4.9 读写锁139<br />4.9.1 排序的链表函数140<br />4.9.2 多线程链表142<br />4.9.3 Pthreads的读写锁144<br />4.9.4 各种实现方案的性能145<br />4.9.5 实现读写锁146<br />4.10 缓存、缓存一致性和伪共享147<br />4.11 线程安全150<br />4.11.1 不正确的程序可以产生<br />正确的输出153<br />4.12 小结153<br />4.13 练习154<br />4.14 编程作业159<br />第5章 OpenMP共享内存编程161<br />5.1 入门162<br />5.1.1 编译和运行OpenMP程序163<br />5.1.2 程序163<br />5.1.3 错误检查165<br />5.2 梯形法则166<br />5.2.1 第一个OpenMP版本166<br />5.3 变量的作用域170<br />5.4 归约子句170<br />5.5 parallel指令173<br />5.5.1 注意事项174<br />5.5.2 数据依赖性175<br />5.5.3 寻找循环迭代相关176<br />5.5.4 估算π176<br />5.5.5 关于作用域的更多内容178<br />5.6 关于OpenMP中的循环的更多<br />内容:排序179<br />5.6.1 冒泡排序179<br />5.6.2 奇偶移项排序180<br />5.7 循环的调度182<br />5.7.1 schedule子句183<br />5.7.2 static调度类型185<br />5.7.3 dynamic和guided调度<br />类型185<br />5.7.4 runtime调度类型186<br />5.7.5 哪种调度187<br />5.8 生产者和消费者188<br />5.8.1 队列188<br />5.8.2 消息传递188<br />5.8.3 发送消息189<br />5.8.4 接收消息189<br />5.8.5 终止检测190<br />5.8.6 开始190<br />5.8.7 atomic指令191<br />5.8.8 临界区和锁191<br />5.8.9 在消息传递程序中使用锁193<br />5.8.10 critical指令、atomic<br />指令或锁194<br />5.8.11 注意事项194<br />5.9 缓存、缓存一致性和伪共享195<br />5.10 任务化199<br />5.11 线程安全202<br />5.11.1 不正确的程序可以产生<br />正确的输出204<br />5.12 小结204<br />5.13 练习208<br />5.14 编程作业211<br />第6章 用CUDA进行GPU编程215<br />6.1 GPU和GPGPU215<br />6.2 GPU架构215<br />6.3 异构计算217<br />6.4 CUDA hello217<br />6.4.1 源代码218<br />6.4.2 编译与运行程序219<br />6.5 深入了解219<br />6.6 线程、线程块和线程网格220<br />6.7 NVIDIA计算能力和设备架构223<br />6.8 向量加法223<br />6.8.1 核函数224<br />6.8.2 Get_args函数225<br />6.8.3 Allocate_vectors函数和<br />托管内存226<br />6.8.4 main函数调用的其他函数227<br />6.8.5 显式内存传输229<br />6.9 从CUDA核函数返回结果231<br />6.10 CUDA梯形法则I233<br />6.10.1 梯形法则233<br />6.10.2 一种CUDA实现234<br />6.10.3 初始化、返回值和最后<br />更新235<br />6.10.4 使用正确的线程236<br />6.10.5 更新返回值和atomicAdd<br />函数236<br />6.10.6 CUDA梯形法则的性能237<br />6.11 CUDA梯形法则II:提升性能238<br />6.11.1 树形通信238<br />6.11.2 局部变量、寄存器、共享和<br />全局内存239<br />6.11.3 线程束和线程束洗牌240<br />6.11.4 使用线程束洗牌实现树形<br />全局求和241<br />6.11.5 共享内存和线程束洗牌的<br />替代方案242<br />6.12 用warpSize个线程块实现<br />梯形法则243<br />6.12.1 主机代码244<br />6.12.2 使用线程束洗牌的核函数244<br />6.12.3 使用共享内存的核函数244<br />6.12.4 性能245<br />6.13 CUDA梯形法则III:使用具有<br />多个线程束的线程块245<br />6.13.1 __syncthreads函数246<br />6.13.2 关于共享内存的更多内容247<br />6.13.3 使用共享内存的线程束<br />求和247<br />6.13.4 共享内存库248<br />6.13.5 收尾工作249<br />6.13.6 性能251<br />6.14 双调排序251<br />6.14.1 串行双调排序251<br />6.14.2 蝶式交换和二进制表示254<br />6.14.3 并行双调排序I256<br />6.14.4 并行双调排序II258<br />6.14.5 CUDA双调排序的性能259<br />6.15 小结260<br />6.16 练习264<br />6.17 编程作业267<br />第7章 并行程序开发269<br />7.1 两种n-body问题的解决方案269<br />7.1.1 问题描述269<br />7.1.2 两种串行方案270<br />7.1.3 并行化n-body求解方案274<br />7.1.4 关于I/O的说明276<br />7.1.5 使用OpenMP并行化基本<br />求解方案277<br />7.1.6 使用OpenMP并行化简化<br />求解方案279<br />7.1.7 评估OpenMP代码283<br />7.1.8 使用Pthreads并行化求解<br />方案284<br />7.1.9 使用MPI并行化求解方案284<br />7.1.10 使用MPI并行化简化求解<br />方案286<br />7.1.11 MPI简化求解的性能291<br />7.1.12 使用CUDA并行化基本<br />求解方案292<br />7.1.13 关于CUDA协同组的说明294<br />7.1.14 基本CUDA n-body求解<br />方案的性能295<br />7.1.15 提高CUDA n-body求解<br />方案性能的方法295<br />7.1.16 在n-body求解方案中使用<br />共享内存技术296<br />7.2 样本排序299<br />7.2.1 样本排序和桶排序299<br />7.2.2 选择样本数据300<br />7.2.3 Map函数的简单实现301<br />7.2.4 Map的另一种实现方案302<br />7.2.5 并行化样本排序305<br />7.2.6 使用OpenMP实现样本<br />排序308<br />7.2.7 使用Pthreads实现样本<br />排序312<br />7.2.8 使用MPI实现样本排序314<br />7.2.9 使用CUDA实现样本排序323<br />7.3 注意事项331<br />7.4 使用哪种API331<br />7.5 小结332<br />7.5.1 MPI333<br />7.6 练习334<br />7.7 编程作业340<br />第8章 下一步该怎么走343<br />参考文献345<br />

内容摘要
本书主要讲解如何使用MPI、Pthreads和OpenMP开发有效的并行程序,并在多核和集群架构上编译运行并行程序。本书第1版已经过广泛的本科教学实践,第2版做了细致的更新,清晰地阐释了如何设计、调试和评估分布式和共享内存程序的性能,并新增关于GPU编程和异构编程的内容,对加速器的讨论更加全面。第2版还对习题做了更新,读者可通过习题进一步熟悉并掌握编译、运行和修改示例程序的方法。

—  没有更多了  —

以下为对购买帮助不大的评价

此功能需要访问孔网APP才能使用
暂时不用
打开孔网APP