利用GPU进行高性能数据并行计算《程序员》2008年第4期

高性能计算

数据库技术的成熟,数据挖掘应用,生物基因技术的发展,历史数据的几何级膨胀等要求高性能计算 (High Performance Computing HPC) 。虽然通过创建分布式系统可以解决部分大型计算的问题,但是分布式系统有通信开销大,故障率高;数据的存取结构复杂,开销大;数据的安全性和保密性较难控制等弱点。随着计算机处理器,特别是 GPU (Graphical Processing Unit) 计算能力的飞速提高,高性能计算逐步进入桌面(低端)领域,这就要求我们探讨并行编程模型与并行编程等软件技术。

GPU 强大计算能力

早期的 3D 游戏,显卡只是为屏幕上显示像素提供一个缓存,所有的图形处理都是由 CPU 单独完成。图形渲染适合并行处理,擅长于执行串行工作的 CPU 实际上难以胜任这项任务。直到 1995 年, PC 机领域第一款 GPU 3dfx Voodoo 出来以后,游戏的速度、画质才取得了一个飞跃。 GPU 的功能更新很迅速,平均每一年多便有新一代的 GPU 诞生,运算速度也越来越快。以下图 1 和表 1 是表明 2006 年度 GPU CPU 价格相当的情况下, GPU 的计算能力已经远远高于 CPU 的计算能力。 注: GFLOPS 为每秒浮点运算能力。

1 CPU/GPU 计算能力比较


Intel Core2Due Woodcrest

GeForce 8800 GT

运算能力比较

24 GFLOPS

520 GFLOPS

GPU 21.6

1 CPU/GPU 计算能力比较

为什么 GPU 跑得快?

GPU具有两点主要特征:超长流水线与并行计算 [4]

如果装配一台汽车需要 10个时间单元,将它分成 10个流水线阶段,每个阶段分配一个时间单元,那么一条装配线每一个时间单元就可以生产一辆汽车。显然流水线模式的生产在理想状况下要比串行方式快了十倍。

GPU通过单指令多数据 (SIMD)指令类型来支持数据并行计算。参见图 2,在单指令多数据流的结构中,单一控制部件向每条流水线分派指令,同样的指令被所有处理部件同时执行。例如 NVIDIA 8800GT显卡中包含有 14组多处理器 (Multiprocessor),每组处理器有 8个处理单元 (Processor),但每组多处理器只包含一个指令单元 (Instruction Unit)

 

2 NVDIA GeForce 8 体系结构 [1]

GPU 流式编程模型

GPU 编程以流式编程模型为基础,它以允许高效计算和通信的方式构造程序 [3] 。在流式编程模型中,所有数据都表现为流。我们把流定义为具有相同数据类型的数据的有序集。数据类型可以是简单的 ( 整数或浮点数流 ) 或复杂的 ( 点或三角形或变换矩阵流 ) 。流可以是任意长度,如果流很长 ( 流中有上百或更多的元素 ) ,那么流上的操作并行度将很高。流上允许的操作包括复制它们,从它们导出子流,用一个单独的索引流索引入它们,以及用核在它们上执行计算。 GPU 程序称为核,核操作整个流,获取一个或多个流作为输入并产生一个或多个流作为输出。核的特征是它操作多个流上的所有元素而不是独立的元素。

CPU 程序以异步的方式调用 GPU 核程序。 GPU 作为 CPU 的协处理器 (Coprocessor) 提供服务。

实验

我们的实验基于 CUDA SDK以及 C语言编译器在 8800GT显卡上开发运行的。 CPU版程序为双线程,用 VC++6.0开发,运行于 Intel Core2Duo主频为 2.6G赫兹。实验结果中, GPU版程序运行时间包括输入数据流和输出数据流上传和下载到显卡的 I/O时间。

1   DES 编解码

对称密钥加密算法 DES(Data Encryption Standard)是由 IBM公司在 70年代发展起来的,并经过政府的加密标准筛选后,于 1976 11月被美国政府采用, DES随后被美国国家标准局和 美国国家标准协会 (American National Standard Institute ANSI) 承认。 DES算法广泛应用于数据加密。例如 SSL (Secure Socket Layer)安全套接层协议可选用 DES算法作为数据加密方法。

DES算法对 64位数据进行加密后输出 64位数据。 DES算法可以用流计算模型来实现,输入与输出流的基本数据类型为 64位数据。核程序为 DES算法。

 

DES 编码

CPU 时间

GPU 时间

GPU 版比 CPU 版快

64 M 字节

11.4

1

11.4

2 CPU/GPU DES 编码实验结果

2  MD5密码破解

MD5 Message-Digest Algorithm 5 (信息 - 摘要算法 5 ),是一种用于产生数字签名的单项散列算法,在 1991 年由 MIT Laboratory for Computer Science IT 计算机科学实验室)和 RSA Data Security Inc RSA 数据安全公司)的 Ronald L. Rivest 教授开发出来,经由 MD2 MD3 MD4 发展而来。它的作用是让大容量信息在用数字签名软件签私 人密匙前被 " 压缩 " 成一种保密的格式。将一个任意长度的“字节串”通过一个不可逆的字符串变换算法变换成一个 128 比特的大整数,换句话说就是,即使你 看到源程序和算法描述,也无法将一个 MD5 的值变换回原始的字符串。

MD5 典型应用是对一段消息产生一摘要,以防止被篡改。

MD5 还广泛用于加密和解密技术上。例如在 UNIX 系统中用户的密码就是以 MD5 (或其它类似算法)经加密后存储在文件系统中。当用户登录时,系统把用户输入的密码计算成 MD5 值,然后再去和保存在文件系统中的 MD5 值进行比较,进而确定输入的密码是否正确。

在我们的程序中,允许用户输入一长度为五的密码的 MD5 值,每位密码变化范围是 A~Za~z[]/^_`{}|~ ,共 64 种字符。穷举所有的密码并用 MD5 算法得到所有的 MD5 值,与用户输入的 MD5 值比较,若枚举的密码 MD5 值与用户输入匹配,输出该密码。

MD5 破解可以用流计算模型来实现,输入流基本数据为长度为 5 个字符的密码,可以枚举出来。所有基于密码产生的 128 比特 MD5 值可看为中间结果流。核程序为 MD5 算法。最后,把中间结果和输入的 MD5 值比较的布尔值组成最终结果流。

 

MD5 破解

CPU 时间

GPU 时间

GPU 版比 CPU 版快

穷举 1G 种可能

201

15.3

13.1

3 CPU/GPU MD5 破解实验结果

3 字符串匹配

字符串匹配问题可以理解为从给定的符号序列中找出具有某种属性的模式。字符串匹配广泛应用于信息检索和计算生物学领域。人们对字符串匹配问题重视程度与日俱增,之所以有这些现象,不仅因为需要处理的文本规模越来越大,而且由于需要在文本中进行越来越复杂的搜索。

本实验随机产生 64M 字节的文本和 64 个长度为 8 的关键字,找出在输入的文本中出现的关键字。本实验的程序采用的是 Boyer-Moore-Horspool-Sunday BMHS )字符串匹配算法 [3].

字符串匹配问题用流计算模型来实现,输入流为 64M 字节文本。核程序为分别对 64 个关键字进行字符串匹配的算法。把 64 个关键字字符串匹配结果的布尔值组成结果流。

值得一提的是,对每个关键词的搜索在窗口内进行,窗口的大小于关键词的长度相等,窗口沿着文本向右滑动。 BMHS 算法将窗口内文本的最后一个字符 (L) 和关键字的最后一个字符进行比较。如果相等,则需要在搜索窗口中从后向前对文本和关键字进行比较,直到完全相等或者在某个字符处不匹配。然后,都将根据 L 在关键字的下一个出现的位置将 窗口向右移动。对每个关键词移动的距离,也就是下次读取字符的位置,是不一样的。参见图 2 NVDIA GeForce 8 体系结构,每次从 GPU 设备存储器 (Device Memory) 读取数据需要耗费 400~600 个时钟周期 [1] 。本实验把输入文本和一两维图像 ( 纹理 ) 进行绑定,这样也就利用了纹理缓存 (Texture Cache) 来提高设备存储器的访问速度,减少大量的 I/O 时间。

字符串匹配

CPU 时间

GPU 时间

GPU 版比 CPU 版快

64 M 字节文本

14.5

1.4

10

4 CPU/GPU 字符串匹配实验结果

4 实验结果小结

吞吐量可由输入数据大小比上处理器运行时间。从图 3 CPU/GPU 吞吐量实验结果表明, GPU 在通用计算方面的性能能够比 CPU 10 倍以上。 MD5 密码破解程序的 I/O 最小, DES 编码程序次之,字符串匹配程序 I/O 最大。相对于 CPU 版程序吞吐量, GPU MD5 密码破解相对性能最高, DES 编码程序次之,虽然字符串匹配程序相对性能最低,但 GPU 版程序也能比 CPU 版程序快一个数量级。

3 CPU/GPU 吞吐量实验结果

GPU 能取代 CPU 吗?

GPU 在运算能力的远远超越 CPU GPU 是否能取代 CPU 呢?答案是否定的。 GPU 具有 CPU 所没有的局限性。 GPU 只提供单指令多数据类型处理,适合于数据并行计算。 GPU 在条件控制能力方面非常弱,若程序使用条件控制语句会极大影响 GPU 程序的执行效率。当然,有部分条件控制语句可以用计算来代替,例如, 判断 两个整数是否相等可以用两个整数异或后再映射成 0 1 来代替。本文中的实验中,利用了这些技巧来避免使用条件控制语句。另外现在的 GPU 与主机 (host) 数据交换只能通过总线来实现,对于需要大量 I/O 的应用,通讯就会成为 GPU 性能瓶颈。

以通用计算为目的 GPU 发展趋势

NVIDIA 发布 Tesla 通用计算架构方案, Tesla GPU 运算处理器不是一图形处理专业卡,可以看作之前的 NVIDIA 图形处理专业卡的通用计算版本。

2006 AMD 拥有了 ATI 的图形加速技术之后,公布了整合 CPU GPU 的新型处理器平台“熔合( Fusion )”架构的方案。按 AMD 的预计, Fusion 架构的产品会在 2008 年底或 2009 年初发布。以 AMD 目前透露的资料看, Fusion 中的将在单一的硅晶片 (die) 上集成的两个分别属于处理器以及 GPU 的独立核心。在这种结构下, CPU 部分拥有自己的缓存, GPU 部分同样如此。 CPU GPU 的互联通过交联层 (CrossBar) 来实现互通数据,而集成内存控制器将同时负责 CPU GPU 对主内存的读写,而各个单元之间最后通过 HyperTransport 总线实现互联为一个整体。

Intel 正在进行称为“ Larrabee (the LARA B) ”的独立显卡开发计划,并将于 2008 年推出显卡样品, 2009 年正式推出产品,进军独立显卡市场。 Larrabee 是一种可编程的多核心架构,不同的版本会有不同数量的核心,并使用经过调整的 x86 指令集,性能上将会达到万亿次浮点运算级别。

可以看出,以通用计算为目的 GPU 发展趋势是 GPU CPU 的整合,适合于大量数据并行计算的任务由 GPU 来承担, GPU 定位为 CPU 的协处理器。需要复杂条件控制的,只能串行处理的任务由 CPU 来承担, CPU GPU 互相配合。

 

参考文献:

[ 1 ] NVIDIA CUDA Programming Guide

[ 2 ] Kapasi 。流计算模型。

[ 3 ] Gonzalo Navarro, Mathieu Raffinot 。《柔性字符串匹配》。

[ 4 ] 沈璐。《 GPU 为什么跑得快 ? 》。

 

CSDN社区-CUDA-CUDA高性能计算讨论-《利用GPU进行高性能数据并行计算》附MD5破解源码

 

MD5密码破解CUDA源码下载

 

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值