首页
社区
课程
招聘
[讨论]GPU vs CPU(TEA算法性能分析)
2010-10-27 03:05 19412

[讨论]GPU vs CPU(TEA算法性能分析)

2010-10-27 03:05
19412
刚刚开始接触GPU运算,搞了两天总算编出自己第一个并行计算的程序。看到很多基于GPU的高级加密算法相当感兴趣,但是对我来说那些算法还太高深了。所以我找了个轻量级的算法入手,以Tea加密算法为例,做了基于CPU和GPU两种框架的编码和运算性能比较。希望有兴趣的朋友一起讨论和改进两种算法,也算小小挑战一下GPU和CPU的极限吧。我会不定期的更新阶段成果,欢迎大家批评和指正。算法方面我是外行,GPU应用开发正在入门阶段。

代码暂时太乱,稍整理一下再放上来。先说一下我的开发测试平台。

硬件平台
CPU:Intel Pent(R)双核 T2370 1.73G*2
显卡:GeForce 8400M GS

软件平台
系统:Win7旗舰版 32bit
GPU开发框架:CUDA ToolKit v3.2
集成开始环境:VS2008 + CUDA_VS_Wizard_W32.2.0

测试程序
GPU程序 (TEA_CUDA)
CPU程序 (TEA_CPU)

---------------------------------------
性能比较
TEA_CUDA:
C:\Users\Seth>E:\Project\VC\TEA_CUDA\Release\TEA_CUDA.exe
GeForce 8400M GS
data len:20971520 ThreadCount:512
v_len:40960
Encrypt Time used: 0.28

TEA_CPU:
C:\Users\Seth>E:\Project\VC\TeaCPU\release\TeaCPU.exe
data len:20971520
CPU used time:0.807000
-----------------------------------------
结论:可以看出在千万字节级的数据处理上GPU是CPU的2倍以上。

不知道这个结论是否准确,明天我把整理好的代码p上来求验证。

|--------------------------------------------------------29/10/2010------------------------------------------------------------------------|

总算把思路整理清楚了,像各位大牛说的。GPU的效率应该远不止这样,选把代码传上来,只是能能GPU上把算法跑起来,称不上优化。有人帮忙测一下效果或提点建议就更好了。算法简单,只是我的程序可能写的有点小恶。我会慢慢改再加上注释的。

----------------------------------------------------------------
最新的性能比较(统计的数据依然很业余甚至不能确定正确性,各位推荐的资料我会慢慢看,谢谢大家的帮助)

C:\Users\Seth>E:\Project\VC\TEA_CUDA\Debug\TEA_CUDA.exe
Device:GeForce 8400M GS
data len:10485760 loopcount:80
encrypt time used: 0.0960(sec)
data Process rate: 104.1667(M/sec)

C:\Users\Seth>E:\Project\VC\TeaCPU\Release\TeaCPU.exe
data len:10485760
encrypt time used: 0.3960(sec)
data Process rate: 25.2525(M/sec)
-----------------------------------------------------------------

|--------------------------------------------------------5/11/2010------------------------------------------------------------------------|

优化方案:把密钥做为常量参数传入,不再为其分配全局内存。

----------------------------------------------------------------
一个小小的改动性能略有提升。

e:\Project\VC\TeaCPU\Release>E:\Project\VC\TEA_CUDA\Release\TEA_CUDA.exe
Device:GeForce 8400M GS
data len:10485760 loopcount:80
encrypt time used: 0.0800(sec)
data Process rate: 125.0000(M/sec)

e:\Project\VC\TeaCPU\Release>TeaCPU.exe
data len:10485760
encrypt time used: 0.3920(sec)
data Process rate: 25.5102(M/sec)

GPU对CPU性能比:(5:1)

-------------------------------------------------------------

[CTF入门培训]顶尖高校博士及硕士团队亲授《30小时教你玩转CTF》,视频+靶场+题目!助力进入CTF世界

上传的附件:
收藏
点赞6
打赏
分享
最新回复 (14)
雪    币: 563
活跃值: (95)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
lixupeng 2010-10-27 08:14
2
0
听说AMD要整合GPU CPU 等明年看看
雪    币: 189
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
adomore 2010-10-27 11:03
3
0
GPU浮点运算快这是肯定的!破解hash使用彩虹表不也是基于GPU运算的原理么?
雪    币: 328
活跃值: (34)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
madsys 2010-10-27 17:13
4
0
[QUOTE=sethseth;879164]结论:可以看出在千万字节级的数据处理上GPU是CPU的2倍以上。
QUOTE]

继续优化,远远不止这个加速比
雪    币: 328
活跃值: (34)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
madsys 2010-10-27 17:15
5
0
单纯彩虹表和GPU没有任何关系。彩虹表只是时空权衡的一种分支罢了,还有一些其他表,效率超过彩虹表。

现在进行高速破解时,有时会利用彩虹表+GPU。算法都在优化中,但总感觉速度很慢,呵呵 毕竟不是指数级的速度提升。
雪    币: 116
活跃值: (41)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
sethseth 2010-10-27 23:41
6
0
请教一个很郁闷的问题用下面的函数

__global__ void
encrypt1 (uint32_t* v, uint32_t* k ,clock_t* time)
{
        clock_t start = clock();

        *time = clock() - start;
}

*time的值应该非常小才对吧? 可是为什么*time值会达到26ms呢
谢谢

“Encrypt Time used: 26.00”
雪    币: 420
活跃值: (77)
能力值: ( LV13,RANK:500 )
在线值:
发帖
回帖
粉丝
kanghtta 12 2010-10-28 13:33
7
0
在任务可分的情况下,Gpu比Cpu快得多,
优化要得到较大的性能提升,除了2.3 第5章的那些原则外,主要是在算法上,也可以编译出ptx asm 来看看,可能也会有些帮助。。

性能分析的时候可以用下cuda里的那个excel文件,对初学者还是有一定的帮助的。。。
雪    币: 116
活跃值: (41)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
sethseth 2010-10-29 01:41
8
0
非常感谢 您说的excel是在哪个路径下呢
雪    币: 116
活跃值: (41)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
sethseth 2010-10-29 01:44
9
0
嗯 我觉得也是 可是我的8400GS确实不强 我想知道这样的平台理论上应该能达到什么样的速率 这个结果是怎么推导出来的呢 非常感谢
雪    币: 116
活跃值: (41)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
sethseth 2010-10-29 01:45
10
0
TEA好像没有用到浮点运算 是不是我用的方法有问题?能给个例子吗?谢谢
雪    币: 420
活跃值: (77)
能力值: ( LV13,RANK:500 )
在线值:
发帖
回帖
粉丝
kanghtta 12 2010-10-29 12:46
11
0
你在sdk下的目录找下,
那个表主要是用来设计 grid 和block 的维度,以便保证在每个SM中有足够多的active warp ,2.3以上的文档有专门讲优化的pdf,首先掌握基本的优化方法,host-device的通讯优化,访存优化,然后在做指令流的优化,指令优化大部分就是算法优化了
雪    币: 202
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
snowshow 2010-11-16 22:23
12
0
技术贴,留名
雪    币: 328
活跃值: (34)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
madsys 2011-3-3 16:36
13
0
我在9800GT上测了一下:
data Process rate: 666.6667(M/sec)

block:64
thread:512

按sm比例来说,差不多。
如果上590GTX,估计就很NB了。
雪    币: 297
活跃值: (43)
能力值: ( LV3,RANK:25 )
在线值:
发帖
回帖
粉丝
tashika 2012-3-23 20:48
14
0
由于数据长度不一样 所以会有拖累 不然提升1k倍是没问题的
雪    币: 116
活跃值: (41)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
sethseth 2012-4-7 03:13
15
0
你好 数据长度不一样是指的什么 能详细说说么 谢啦
游客
登录 | 注册 方可回帖
返回