登入帳戶  | 訂單查詢  | 購物車/收銀台(0) | 在線留言板  | 付款方式  | 聯絡我們  | 運費計算  | 幫助中心 |  加入書簽
會員登入   新用戶註冊
HOME新書上架暢銷書架好書推介特價區會員書架精選月讀2023年度TOP分類閱讀雜誌 香港/國際用戶
最新/最熱/最齊全的簡體書網 品種:超過100萬種書,正品正价,放心網購,悭钱省心 送貨:速遞 / 物流,時效:出貨後2-4日

2024年11月出版新書

2024年10月出版新書

2024年09月出版新書

2024年08月出版新書

2024年07月出版新書

2024年06月出版新書

2024年05月出版新書

2024年04月出版新書

2024年03月出版新書

2024年02月出版新書

2024年01月出版新書

2023年12月出版新書

2023年11月出版新書

2023年10月出版新書

『簡體書』多核与GPU编程:工具、方法及实践

書城自編碼: 2967825
分類: 簡體書→大陸圖書→計算機/網絡硬件 外部设备 维修
作 者: [阿联酋]杰拉西莫斯·巴拉斯
國際書號(ISBN): 9787111557685
出版社: 机械工业出版社
出版日期: 2017-02-01
版次: 1
頁數/字數: 536/411000
書度/開本: 16开 釘裝: 平装

售價:NT$ 929

我要買

share:

** 我創建的書架 **
未登入.



新書推薦:
逆风翻盘  危机时代的亿万赢家 在充满危机与风险的世界里,学会与之共舞并找到致富与生存之道
《 逆风翻盘 危机时代的亿万赢家 在充满危机与风险的世界里,学会与之共舞并找到致富与生存之道 》

售價:NT$ 625.0
工业互联网导论
《 工业互联网导论 》

售價:NT$ 445.0
木偶的恨意(法国悬念大师米歇尔普西悬疑新作)
《 木偶的恨意(法国悬念大师米歇尔普西悬疑新作) 》

售價:NT$ 295.0
孤独传:一种现代情感的历史
《 孤独传:一种现代情感的历史 》

售價:NT$ 390.0
家、金钱和孩子
《 家、金钱和孩子 》

售價:NT$ 295.0
形而上学与测量
《 形而上学与测量 》

售價:NT$ 340.0
世界航母、舰载机图鉴   【日】坂本明
《 世界航母、舰载机图鉴 【日】坂本明 》

售價:NT$ 340.0
量价关系——透视股票涨跌脉络
《 量价关系——透视股票涨跌脉络 》

售價:NT$ 340.0

建議一齊購買:

+

NT$ 252
《 人工智能中的深度结构学习 》
+

NT$ 1210
《 深度学习 》
+

NT$ 569
《 深度学习与计算机视觉 算法原理、框架应用与代码实现 》
+

NT$ 353
《 Lua设计与实现 》
+

NT$ 497
《 多智能体机器学习:强化学习方法 》
+

NT$ 922
《 深度学习、优化与识别 》
內容簡介:
本书从并行软件的实现、调试、优化和剖析四个方面,详细讨论了当前主要的并行计算关键技术,主要内容包括:多核和并行程序设计、共享内存编程中的线程与OpenMP、分布式内存编程、GPU编程、Thrust模板库、负载均衡等。本书结合具体的代码和案例分析,揭示了如何使用库或者指令创建多核应用,如何使用MPI开发分布式应用程序,如何使用CUDA开发高性能GPU程序,如何实现负载均衡,以及如何针对目标多核平台进行程序剖析和调试等。本书可供从事高性能计算技术研究的专业人员参考,也可作为高校相关专业的教学用书。
關於作者:
Gerassimos Barlas 沙迦美国大学计算机科学与工程系教授。他的研究兴趣包括并行算法、开发、分析,以及负载平衡的建模框架,分布式视频点播。Barlas教授讲授并行编程课程已有12年时间,早在20世纪90年代,他就开始研究并行计算,并积极参与并行和分布式系统可分负载理论这一新领域的研究工作。
目錄
目录?Contents
译者序
前 言
第1章 概述1
1.1 多核计算机时代1
1.2 并行计算机的分类3
1.3 现代计算机概览4
1.3.1 Cell BE处理器5
1.3.2 NVIDIA Kepler6
1.3.3 AMD APU9
1.3.4 从多核到众核:Tilera TILE-Gx8072和Intel Xeon Phi10
1.4 性能指标12
1.5 并行程序性能的预测与测量16
1.5.1 Amdahl定律18
1.5.2 Gustafson-Barsis定律20
第2章 多核和并行程序设计23
2.1 引言23
2.2 PCAM方法学24
2.3 分解模式26
2.3.1 任务并行27
2.3.2 分而治之分解28
2.3.3 几何分解30
2.3.4 递归数据分解32
2.3.5 流水线分解35
2.3.6 基于事件的合作分解39
2.4 程序结构模式39
2.4.1 单程序多数据40
2.4.2 多程序多数据40
2.4.3 主从41
2.4.4 map-reduce41
2.4.5 forkjoin42
2.4.6 循环并行44
2.5 匹配分解模式和程序结构模式44
第3章 共享内存编程:线程46
3.1 引言46
3.2 线程48
3.2.1 线程的定义48
3.2.2 线程的作用49
3.2.3 线程的生成和初始化49
3.2.4 在线程间共享数据55
3.3 设计考虑57
3.4 信号量58
3.5 经典问题中的信号量62
3.5.1 生产者消费者63
3.5.2 终止处理66
3.5.3 理发师问题:引入公平性75
3.5.4 读者写者问题80
3.6 monitor84
3.6.1 设计方法1:monitor内部的关键区87
3.6.2 设计方法2:monitor控制关键区的入口87
3.7 经典问题中的monitor91
3.7.1 重新考虑生产者消费者问题91
3.7.2 重新考虑读者写者问题95
3.8 动态线程管理与静态线程管理102
3.8.1 Qt线程池102
3.8.2 线程池的创建和管理103
3.9 调试多线程应用111
3.10 高层次结构:无须显式利用线程的多线程编程115
3.10.1 并发map116
3.10.2 map-reduce118
3.10.3 并发过滤120
3.10.4 filter-reduce121
3.10.5 案例研究:多线程存储122
3.10.6 案例研究:多线程图像匹配131
第4章 共享内存编程:OpenMP140
4.1 引言140
4.2 第一个OpenMP程序141
4.3 变量作用域144
4.3.1 定积分OpenMP版本V.0:人工划分146
4.3.2 定积分OpenMP版本 V.1:无竞争条件的人工划分147
4.3.3 定积分OpenMP V.2:基于锁的隐式划分148
4.3.4 定积分OpenMP V.3:基于归约的隐式划分150
4.3.5 变量作用域总结151
4.4 循环级并行152
4.4.1 数据依赖154
4.4.2 嵌套循环162
4.4.3 调度162
4.5 任务并行166
4.5.1 sections指令166
4.5.2 task指令171
4.6 同步结构177
4.7 正确性与优化问题183
4.7.1 线程安全183
4.7.2 假共享187
4.8 案例研究:OpenMP中的排序算法192
4.8.1 自下而上归并排序算法的OpenMP实现192
4.8.2 自上而下归并排序算法的OpenMP实现195
4.8.3 性能评估200
第5章 分布式内存编程203
5.1 通信进程203
5.2 MPI204
5.3 核心概念205
5.4 你的第一个MPI程序206
5.5 程序体系结构208
5.5.1 SPMD208
5.5.2 MPMD209
5.6 点对点通信210
5.7 可选的点对点通信模式214
5.8 非阻塞通信216
5.9 点对点通信小结220
5.10 错误报告与处理220
5.11 集合通信简介222
5.11.1 分发226
5.11.2 收集231
5.11.3 归约233
5.11.4 多对多收集237
5.11.5 多对多分发240
5.11.6 多对多归约245
5.11.7 全局同步245
5.12 通信对象245
5.12.1 派生数据类型246
5.12.2 打包解包253
5.13 节点管理:通信器和组254
5.13.1 创建组255
5.13.2 建立内部通信器257
5.14 单边通信259
5.14.1 RMA通信函数261
5.14.2 RMA同步函数262
5.15 IO注意事项270
5.16 MPI多进程和多线程混合编程276
5.17 时序和性能测量279
5.18 调试和分析MPI程序279
5.19 Boost.MPI库283
5.19.1 阻塞和非阻塞通信285
5.19.2?数据序列化289
5.19.3?集合通信292
5.20 案例研究:有限扩散聚合模型295
5.21 案例研究:暴力加密破解300
5.21.1 版本1:基本型MPI300
5.21.2 版本2:MPI与OpenMP的结合305
5.22 案例研究:主从式并行模型的MPI实现308
5.22.1 简单主从式设置309
5.22.2 多线程主从式设置316
第6章 GPU编程333
6.1 GPU编程简介333
6.2 CUDA编程模型:线程、线程块、线程网格335
6.3 CUDA执行模型:流多处理器和warp340
6.4 CUDA程序编译过程344
6.5 构建CUDA项目347
6.6 内存层次结构349
6.6.1 本地内存寄存器355
6.6.2 共享内存356
6.6.3 常量内存363
6.6.4 texture和surface内存368
6.7 优化技术369
6.7.1 线程组织设计369
6.7.2 kernel结构378
6.7.3 共享内存访问382
6.7.4 全局内存访问388
6.7.5 page-locked与zero-copy内存392
6.7.6 统一内存394
內容試閱
Preface?前言多核架构出现在21世纪的第一个10年里,给并行计算带来了勃勃生机。新平台需要新方法来进行软件开发,其中一个新方法就是把工具和工作站网络时代的惯例同新兴软件平台(如CUDA)相结合。
为满足这种需求,本书将介绍目前主流的工具和技术,不仅是各自独立的工具和技术,更重要的是将它们相互结合。书中会提供多平台和程序设计范例(如消息传递和线程)高效结合的实例。顾名思义,Hybrid(混合)计算,是高性能计算的一个新趋势,针对百亿亿级的性能需求,使软件有可能扩展到数百万的线程上。
所有章节都包含丰富的示例和实际问题,并比较了不同的设计脚本,重点在于如何使其实际运作起来。那些能使得高效的软件开发区别于徒劳无功的软件开发训练的所有细节,都以有序的形式呈现出来。
本书介绍了从20世纪90年代继承而来的最新的先进工具(例如OpenMP和MPI标准),并包括更前沿的平台,如具有复杂线程管理功能的Qt库,以及具有在不同多核架构(包括CPU和GPU)上配置相同软件功能的Thrust模板库。
我不可能面面俱到地给出多核开发中的所有可用工具。即使是POSIX线程之类的一些行业标准,书中也并未涉及。
本书不仅旨在介绍主流范型(范围从OpenMP的串行代码半自动并行化到用来巩固MPI的显式通信plumping)的实例,还要讲解高效的多核软件开发背后的原理,并指导读者进行实践。
本书内容本书可以分成如下几个逻辑单元,虽然书中没有明确地这样区分。
多核软件的设计概述概述:第1章介绍多核硬件,讨论了一些具有影响力的体系结构范型示例。第1章也介绍了加速比和效率,在评估多核和并行软件时这些是基本的度量方式。1.5节告诉读者如何从多核和众核硬件激动人心的新进展中预测出什么是人们所期待的方法。
第2章讨论可应用于并行和多核软件开发的方法论与设计模式,包括工作分解模式和程序结构模式。
共享内存编程:讨论了两种不同的共享内存并行编程方法显式并行化和隐式并行化。在显式方面,第3章覆盖了线程和两种最常用的同步机制信号和monitor。对于通常遇到的设计模式(如生产者消费者模式和读者写者模式),均给出了详细解释并应用于一系列示例中。
在隐式方面,第4章介绍了OpenMP标准,该标准的设计使得我们能以最少的工作量将现有串行代码并行化。它可使开发时间大大缩短。该标准还有其他的好处,如解决了循环间存在的依赖。
分布式内存编程:第5章介绍了分布式内存并行编程的事实标准消息传递接口(MPI)。MPI同多核编程相关,因为它旨在把程序从一个共享内存多核机器上扩展到一个具有上百万节点的超级计算机上。就其本身而言,MPI能够为利用多核机器的多重分解提供基础,以作为独立的虚拟平台。
这部分涉及的特征包括点对点通信和集合通信,也包括单边通信。有一节内容专门针对Boost.MPI库,虽然还未实现全部的功能,但它的确简化了使用MPI的过程。
GPU编程:GPU是把本书内容组织在一起的最初原因之一。以此类推到共享内存编程,这里从两个方面讨论了针对GPU软件开发的问题。一方面是NVIDIA的CUDA中的具体方法,该方法中的内存传输、数据放置和线程执行配置都需要仔细计划。这将在第6章进行介绍。
另一方面是高级的Thrust模板库算法方法,这部分在第7章中讨论。程序设计的类标准模板库(STL-like)方法为Thrust提供了把CPU和GPU平台均作为目标的能力,在本书所介绍的工具中,这是一个独特的特性。
负载均衡:第8章讨论在多核开发中经常被低估的一个方面。一般来说,一旦异构计算资源开始运行,就应该认真考虑负载均衡。举例来说,一个CPU和一个GPU构成这一组资源,我们在满足需求时不能只考虑一群不同机器的集合。第8章简要讨论了Linda语言,这可以被看做动态负载均衡的高级抽象。
书中主要的关注点在静态负载均衡,以及可以用于驱动负载分区和数据通信序列的数学模型。
很多场景中都应用了一种已经得到认可的方法论可分负载理论(DLT),并且给出了解释。书中还介绍了一个简单的C库,它实现了部分过去20年中已经发表过的DLT研究结果。
软件和硬件要求书中的示例都是在Ubuntu Linux系统上开发和测试的。本书中使用的所有软件都是可以免费获取或者是开源的。其中包括:
GNU CC 编译器组件 4.8.x(兼容 CUDA),组件4.9.x (兼容OpenMP 4.0)Digia的 Qt 4.x 库或者Qt 5.x 库OpenMPI 1.6MPENVIDIA的 CUDA SDK 6.5Thrust 库 (版本1.7)如果拥有近期正确安装的Linux,并装有版本等于或高于上述软件列表中版本号的软件,那么执行本书中提供的示例代码应该不会有任何问题。虽然我没有提供Windows平台下的生成文件或者使用Visual Studio编译和执行示例代码的指令,但未安装Linux的用户只需进行少量代码改动就可以把示例移植到Windows上。考虑到我们使用的是标准CC库,因此对于代码的改动(如果存在)应该只会影响头文件,也就是那些需要被包括的(include)文件。
硬件部分唯一的实际局限是需要计算能力为2.x或者更高的NVIDIA GPU。早期芯片也可以使用,但是它们的独特性,尤其是关于全局内存的访问,在书中没有给出解释。没有NVIDIA GPU的用户可以通过使用附录E中介绍的方法来成功执行CUDA程序。
示例代码书中的程序可在Elsevier网站http:store.elsevier.com9780124171374上获取压缩包。
程序存放在特定的文件夹中,以章名区分,如图1所示。
对于书中的代码清单,均在第1行给出了相对于该章目录的对应文件的位置。
单文件程序的第一行注释里包含编译和链接命令。多文件项目存放在它们自己的目录中,其中也包含一个生成文件或者一个项目(.pro)文件。如果需要输入样本值,该部分数据也在该目录下的文件中提供。
图1 截屏显示了示例代码在特定章节的文件夹中的组织方式教学建议本书中所涉及的内容适合高年级本科生或者研究生课程。学生需要具备的背景知识包括掌握C和C编程(两种语言的使用贯穿整本书)、基本的操作系统概念,以及基本的计算机体系结构常识。
根据各自的需求,教师可以选择使用以下列出的一些教学建议。前两章是为后面的章节奠定基础,因此它们在所有的路径中都包括:
重点在并行编程(本科生):
第1章:Flynn分类法、当代的多核设备、性能标准。1.1~1.5节。
第2章:设计、PCAM方法论、分解模式、程序结构模式。2.1~2.5节。
第3章:线程、信号、monitor。3.1~3.7节。
第4章:OpenMP的基本概念、工作共享结构, 4.1~4.4节。
第5章:MPI、点对点通信、集合操作、目标结构通信,以及调试和性能分析。5.1~5.12节、5.15~5.18节和5.20节。
第6章:CUDA编程模型,内存层次结构,针对GPU的优化。6.1~6.6节、 6.7.1节、6.7.3节、 6.7.6节、6.9~6.11节和6.12.1节。
第7章:Thrust基本的知识。7.1~7.4节。
第8章:负载均衡。8.1~8.3节。
重点在多核编程(本科生):
第1章:Flynn分类法、当代的多核设备、性能标准。1.1~1.5节。
第2章:设计、PCAM方法论、分解模式、程序结构模式。2.1~2.5节。
第3章:线程、信号、monitor。3.1~3.10节。
第4章:基本的OpenMP、工作共享结构,以及正确性和性能问题。4.1~4.8节。
第5章:MPI,点对点通信、集合操作、目标结构通信,以及调试和性能分析。5.1~5.12节、 5.16~5.18节和5.21节。
第6章:CUDA编程模型、内存层次结构,以及针对GPU的优化。6.1~6.10节、 6.12.1节。
第7章: Thrust基本的知识。7.1~7.4节。
第8章:负载均衡。8.1~8.3节。
高级多核编程:
第1章:Flynn分类法、当代的多核设备、性能标准。1.1~1.5节。
第2章:设计、PCAM方法论、分解模式、程序结构模式。2.1~2.5节。
第3章:线程、信号、monitor、高级线程管理。3.1~3.10节。
第4章:OpenMP基本的知识,工作共享结构,以及正确性和性能问题。4.1~4.8节。
第5章:MPI、点对点通信、集合操作、目标结构通信,以及调试和性能分析。5.1~5.12节、 5.15~5.18节和 5.21~5.22节。
第6章:CUDA编程模型、内存层次结构,以及针对GPU的优化。6.1~6.12节。
第7章:Thrust数据类型和算法。7.1~7.7节。
第8章:负载均衡、基于DLT的分割。8.1~8.5节。

 

 

書城介紹  | 合作申請 | 索要書目  | 新手入門 | 聯絡方式  | 幫助中心 | 找書說明  | 送貨方式 | 付款方式 台灣用户 | 香港/海外用户
megBook.com.tw
Copyright (C) 2013 - 2024 (香港)大書城有限公司 All Rights Reserved.