高性能计算机部件有GPU,[计算机]利用GPU进行高性能数据并行计算.pdf

[计算机]利用GPU进行高性能数据并行计算

维普资讯

利用 GPU

进行高性能数据并行计算

一文 /丁艺 明 刘 波

GPU通过单指令 多数据 (SIMD)指令类型来支持数

据并行计算。参见图1,在单指令多数据流的结构 中,单

数 一 控制部件向每条流水线分派指令,同样的指令被所有

处理部件同时执行。例如NVIDIA8800GT显卡中包含有

14组多处理器 (Multiprocessor),每组处理器有8个处理

单元 (Processor),但每组多处理器只包含一个指令单元

(InstructionUnit)。

GPU强大计算能力

早期的3D游戏,显卡只是为屏幕上显示像素提供一

个缓存,所有的图形处理都是由CPU单独完成。图形渲

染适合并行处理,擅长于执行串行工作的CPU实际上难

以胜任这项任务。直到1995年,PC机领域第一款GPU

3dfxVoodoo出来以后,游戏的速度、画质才取得了一个

飞跃。GPU的功能更新很迅速,平均每一年多便有新一代

的GPU诞生,运算速度也越来越快。以下表1表 明2006

年度GPU与CPU价格相当的情况下,GPU的计算能力已

经远远高于CPU的计算能力。注:GFLOPS为每秒浮点

运算能力。

图1 NVDIAGeForce8体系结构

为什么GPU跑得快? GPU流式编程模型

GPU具有两点主要特征:超长流水线与并行计算。 GPU编程 以流式编程模型为基础,它以允许高效计

如果装配一台汽车需要 10个时间单元,将它分成 10 算和通信的方式构造程序。在流式编程模型中,所有数据

个流水线阶段,每个阶段分配一个时间单元,那么一条装 都表现为流。我们把流定义为具有相同数据类型的数据的

配线每一个时间单元就可以生产一辆汽车。显然流水线模 有序集。数据类型可以是简单的(整数或浮点数流)或复杂

式的生产在理想状况下要比串行方式快了十倍。 的(点或三角形或变换矩阵流)。流可以是任意长度,如果

200804 97

维普资讯

/(o~o[[u 一

流很长 (流中有上百或更多的元素),那么流上的操作并行 码计算成MD5值 ,然后再去和保存在文件系统中的MD5

度将很高。流上允许的操作包括复制它们,从它们导出子 值进行比较,进而确定输入的密码是否正确。

流,用一个单独的索引流索引入它们,以及用核在它们上 在我们的程序中,允许用户输入一长度为五的密码的

执行计算。GPU程序称为核,核操作整个流,获取一个 MD5值,每位密码变化范围是A—Za—z口、^_、01一,共64种

或多个流作为输入并产生一个或多个流作为输出。核的特 字符。穷举所有的密码并用MD5算法得到所有的MD5值,

征是它操作多个流上的所有元素而不是独立的元素。 与用户输入的MD5值比较,若枚举的密码MD5值与用户

CPU程序以异步的方式调用GPU核程序。GPU作为 输入

"高性能并行计算"课程讲义 第一部分并行计算基础 第一章预备知识 1.1 并行计算的目标和内容. . . . . . . . . . . . . . . . . . 5 1.2 并行计算机发展历程. . . . . . . . . . . . . . . . . . . 6 1.2.1 计算机系统发展简史. . . . . . . . . . . . . . . . . . 6 1.2.2 并行计算机发展简述. . . . . . . . . . . . . . . . . . 7 1.3 目前世界高性能计算机的状况. . . . . . . . . . . . . . . 9 1.4 可扩展的并行计算机体系结构. . . . . . . . . . . . . . . 11 1.4.1 对称多处理机系统. . . . . . . . . . . . . . . . . . . 11 1.4.2 分布共享存储处理机系统. . . . . . . . . . . . . . . . 13 1.4.3 大规模并行计算机系统. . . . . . . . . . . . . . . . . 14 1.4.4 机群系统. . . . . . . . . . . . . . . . . . . . . . . 15 1.5 国内外超级计算中心状况. . . . . . . . . . . . . . . . . 16 1.5.1 美国超级计算中心简介. . . . . . . . . . . . . . . . . 16 1.5.2 中国大陆超级计算中心简介. . . . . . . . . . . . . . . 17 第二章基础并行算法 2.1 并行计算基本概念. . . . . . . . . . . . . . . . . . . . 21 2.2 并行算法设计基本原则. . . . . . . . . . . . . . . . . . 22 2.3 区域分解方法. . . . . . . . . . . . . . . . . . . . . . 23 2.4 功能分解方法. . . . . . . . . . . . . . . . . . . . . . 24 2.5 流水线技术. . . . . . . . . . . . . . . . . . . . . . . 25 2.6 分而治之方法. . . . . . . . . . . . . . . . . . . . . . 27 2.7 同步并行算法. . . . . . . . . . . . . . . . . . . . . . 27 2.8 异步并行算法. . . . . . . . . . . . . . . . . . . . . . 28 2.9 作业. . . . . . . . . . . . . . . . . . . . . . . . . . 28 第二部分并行算法设计与实现 第三章矩阵并行计算 3.1 并行矩阵乘法. . . . . . . . . . . . . . . . . . . . . . 32 3.1.1 串行矩阵乘法. . . . . . . . . . . . . . . . . . . . . 32 3.1.2 行列划分算法. . . . . . . . . . . . . . . . . . . . . 33 3.1.3 行行划分算法. . . . . . . . . . . . . . . . . . . . . 33 3.1.4 列列划分算法. . . . . . . . . . . . . . . . . . . . . 34 3.1.5 列行划分算法. . . . . . . . . . . . . . . . . . . . . 35 3.1.6 Cannon 算法. . . . . . . . . . . . . . . . . . . . . .35 3.2 线性代数方程组并行求解方法. . . . . . . . . . . . . . . 36 3.2.1 分布式系统的并行LU 分解算法. . . . . . . . . . . . . .37 3.2.2 三角方程组的并行解法. . . . . . . . . . . . . . . . . 38 3.3 对称正定线性方程组的并行解法. . . . . . . . . . . . . . 41 3.3.1 Cholesky 分解列格式的并行计算. . . . . . . . . . . . .41 3.3.2 双曲变换Cholesky 分解. . . . . . . . . . . . . . . . .42 3.3.3 修正的双曲变换Cholesky 分解. . . . . . . . . . . . . .44 3.4 三对角方程组的并行解法. . . . . . . . . . . . . . . . ..46 3.5 经典迭代算法的并行化. . . . . . . . . . . . . . . . . . 47 3.5.1 Jacobi 迭代法. . . . . . . . . . . . . . . . . . . . .47 3.5.2 Gauss-Seidel 迭代法. . . . . . . . . . . . . . . . . .48 3.6 异步并行迭代法. . . . . . . . . . . . . . . . . . . . . 49 3.6.1 异步并行迭代法基础. . . . . . . . . . . . . . . . . . 49 3.6.2 线性迭代的一般收敛性结果. . . . . . . . . . . . . . . 50 3.7 代数特征值问题的并行求解. . . . . . . . . . . . . . . . 51 3.7.1 对称三对角矩阵特征值问题. . . . . . . . . . . . . . . 51 3.7.2 Householder 变换. . . . . . . . . . . . . . . . . . . 52 3.7.3 化对称矩阵为三对角矩阵. . . . . . . . . . . . . . . . 53 3.8 作业. . . . . . . . . . . . . . . . . . . . . . . . . . 53 第三部分并行实现 第四章并行程序设计 4.1 并行编程模式的主要类型. . . . . . . . . . . . . . . . . 57 4.2 并行程序的基本特点. . . . . . . . . . . . . . . . . . . 57 4.3 并行程序的实现技术. . . . . . . . . . . . . . . . . . . 57 第五章消息传递编程接口MPI 5.1 MPI 简介. . . . . . . . . . . . . . . . . . . . . . . . 59 5.2 MPI 程序实例. . . . . . . . . . . . . . . . . . . . . . 59 第六章MPI 并行环境管理函数. . . . . . . . . . . . . . . . . 63 第七章MPI 进程控制函数 7.1 MPI 进程组操作函数. . . . . . . . . . . . . . . . . . . 65 7.2 MPI 通信子操作. . . . . . . . . . . . . . . . . . . . . 68 第八章MPI 点到点通信函数 8.1 阻塞式通信函数. . . . . . . . . . . . . . . . . . . . . 71 8.2 非阻塞式通信函数. . . . . . . . . . . . . . . . . . . . 77 8.3 特殊的点到点通信函数. . . . . . . . . . . . . . . . . . 82 8.4 MPI 的通信模式. . . . . . . . . . . . . . . . . . . . . 84 第九章MPI 用户自定义的数据类型与打包 9.1 用户定义的数据类型. . . . . . . . . . . . . . . . . . . 87 9.2 MPI 的数据打包与拆包. . . . . . . . . . . . . . . . . . 93 第十章MPI 聚合通信 10.1 障碍同步. . . . . . . . . . . . . . . . . . . . . . . .97 10.2 单点与多点通信函数. . . . . . . . . . . . . . . . . .. 99 10.3 多点与多点通信函数. . . . . . . . . . . . . . . . . . .103 第十一章MPI全局归约操作. . . . . . . . . . . . . . . . . . 107 第十二章HPL程序实例剖析. . . . . . . . . . . . . . . . . . 117 参考文献. . . . . . . . . . . . . . . . . . . . . . . . . .119 附录一并行程序开发工具与高性能程序库. . . . . . . . . . . .121 A.1 BLAS、LAPACK、ScaLAPACK .. . . . . . . . . . . . . . . .121 A.2 FFTW . . . . . . . . . . . . . . . . . . . . . . . . . .121 A.3 PETSc . . . . . . . . . . . . . . . . . . . . . . . . . 121 附录二MPI函数reference. . . . . . . . . . . . . . . . . . . 123 索引. . . . . . . . . . . . . . . . . . . . . . . . . . . . 125
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值