首页
社区
课程
招聘
[分享]GPUs - NVIDIA CUDA 平台相关资料
2009-11-24 14:37 3570

[分享]GPUs - NVIDIA CUDA 平台相关资料

2009-11-24 14:37
3570
首先说说什么是CUDA,虽然百度百科这段解释怎么都读不通,但是还是能让我们了解什么是CUDA:
CUDA(Compute Unified Device Architecture),显卡厂商NVidia推出的运算平台。
CUDA?是一种由NVIDIA推出的通用并行计算架构,该架构使GPU能够解决复杂的计算问题。 它包含了CUDA指令集架构(ISA)以及GPU内部的并行计算引擎。

1. 从哪能下载到CUDA的开发库?
包括CUDA的Toolkit和SDK都可以从NVIDIA官方网站上免费得到:
http://www.nvidia.cn/object/cuda_get_cn.html

注意选择你的操作系统类型,并依次下载CUDA显卡驱动、CUDA 工具包和CUDA 软件开发包,如图:


然后按顺序安装CUDA 工具包和CUDA 软件开发包(CUDA显卡驱动可选,如果你只是想模拟CUDA环境或者没有支持CUDA的显卡,请看第二步)

2. CUDA的模拟环境
开发CUDA必需拥有一块支持CUDA的高档显卡吗?当然不用!NVIDIA显然不会将没有买他们卡的开发者拒之门外,无论你用的是ATI的显卡甚至是集成显卡,都可以用CUDA SDK中的模拟环境来运行CUDA的代码,只是性能没有GPU那么好而已。
按顺序安装下载好的CUDA 工具包(cudatoolkit_2.3_win_32.exe)和CUDA 软件开发包(cudasdk_2.3_win_32.exe),这样你就可以开始CUDA的开发了。

3. 编译CUDA代码还需要什么条件?
VC 2005 或 VC 2008。NVCC编译时需要调用MS的C语言编译器CL.exe,从当前版本的CUDA工具包(2.3)中看,nvcc.exe只对VC8/VC9的cl有反应,所以你还需要装个VC2005或VC2008。
另外我尝试了下用Cygwin的g++来编译,不过还是失败了。根据官方论坛的说法,就算用了Cygwin,也是需要引入-ccbin指定cl.exe的路径

CUDA开发资料:
最全的还是NV官网提供的资料,NVIDIA CUDA Programming Guide能帮你快速了解CUDA代码的特性。
其他教程在这个地方:http://www.nvidia.cn/object/cuda_education_cn.html

[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

上传的附件:
收藏
点赞0
打赏
分享
最新回复 (6)
雪    币: 232
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
deryope 1 2009-11-24 14:45
2
0
之前是官方的资料,贴个另外的教程:
CUDA, Supercomputing for the Masses: Part 1-14
http://www.ddj.com/architect/207200659
http://www.ddj.com/hpc-high-performance-computing/207402986
...
(只给出Part1,2的链接,拖到最后有个列表可以选择)
雪    币: 232
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
deryope 1 2009-11-24 14:57
3
0
再来是利用CUDA平台高速破解MD5的例子,实际上这样的代码Google就能找到很多,推荐两个不错的:
CUDA MD5  (需要boost库,不过代码比较短)
http://code.google.com/p/cudamd5/

MD5 GPU Crack  (写得比较完善的MD5破解程序)
http://bvernoux.free.fr/md5/index.php

我测试CUDA MD5,在模拟器环境下,穷举出“n2xv51”这样小写+数字的6位MD5,只用了1253秒,放到GPU中跑的话估计还会提升不少:
> cudamd5.exe 6 6 D43384B77C4EEDD75FFA9F3569447C75 "0123456789abcdefghijklmnopqrstuvwxyz"
hash=D43384B77C4EEDD75FFA9F3569447C75, Charset=0123456789abcdefghijklmnopqrstuvwxyz
size=6, check complete! cudaError: no error
1.000000
result: n2xv51
crack md5 cost: 1253.82s


其他几个类似的项目:
HashClash
http://code.google.com/p/hashclash/

Nightingale is a a GPU password software designed to encrypt or bruteforce password using GPU
http://code.google.com/p/nightingale/
上传的附件:
雪    币: 2096
活跃值: (100)
能力值: (RANK:420 )
在线值:
发帖
回帖
粉丝
rockinuk 8 2009-11-24 15:59
4
0
謝謝 deryope 的用心及分享。


請問 deryope 可以把 crack RSA-129 的移轉到 CUDA 上 測試看看嗎?
雪    币: 232
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
deryope 1 2009-11-24 17:35
5
0
这个我就不清楚了,没有接触过RSA-129。不知道版主有没有普通PC上破解RSA-129的源码资料,有的话可能会方便点。(Google了下好像没有人做过这方面的)

CUDA MD5实际上就是把穷举MD5工作交给GPU去做,而且并没有最初设想的拆分算法过程。
我们一般实现MD5破解是通过一个循环,从字符集里产生一个密码,计算MD5 -> 比较是不是所需要的结果。这种方式瓶颈在于MD5值的计算上。

而CUDA MD5中是将每个MD5计算分配给一个线程,利用CUDA的优势,让 8*256 个线程去同时跑 2048 个MD5值!也就说并不是在一次计算中将之并行化,而是相当于用 2048 台机器并行去计算这些MD5值,然后比较结果。

举个例子,假设有 AA/AB/AC/AD/.../ZX/ZY/ZZ 这样一组需要测试的密码,原来的程序只能是:
for (x = 从 AA/AB/.../ZZ 中选取一个密码)
{
if (目标MD5 = MD5(x)) {
// 找到的MD5密码是 x
break;
}
}

而改成CUDA代码后,就可以丢掉这个引起瓶颈的循环了。通过CUDA的线程ID,可以让他们各自并行的计算 AA/AB/AC/AD/.../ZX/ZY/ZZ 的值,然后每个线程检查一次自己计算的MD5是否和目标MD5相等,只要有一个命中目标,就可以结束这个操作了。
这个过程就好像把上面循环里的if语句交给26^2=676台机器并行去做一样,所以计算时间相当短暂。

不知道这样说明的话rockinuk版主能否明白。也就说只要有RSA-129的穷举破解程序,就可以改成CUDA的代码,同时起 8*256 个线程去计算不同密钥的RSA就行了。

不过看到GPU的这个计算能力,我最先想到的是用这个高速生成RainBow Table。实际上计算一个链长大于10000,Hash链较多的彩虹表,是相当耗时的。现在可以改成让每个线程负责计算一条链,这样GPU性能越高,一次计算的链也就越多,生成速度也就越快。
雪    币: 2096
活跃值: (100)
能力值: (RANK:420 )
在线值:
发帖
回帖
粉丝
rockinuk 8 2009-11-24 21:31
6
0
RSA-129 的文章我也在找。
雪    币: 234
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
qsyqsy 2009-11-27 18:36
7
0
gpus专案估计时间比较长,在过一段时间,我抽空弄一份完整的资料供参考
游客
登录 | 注册 方可回帖
返回