python如何使用gpu运算,如何用gpu运行python程序
有两个障碍。编写运行在GPU上的程序。AFAIK,目前还没有把Python程序转换成GPU执行代码的机制。所以只要找不到自己需要的,就必须使用GPU编程语言(CUDA,OpenCL,Haskell,…)。
从Python调用运行在GPU上的程序来交换数据。有几个Python CUDA项目可以实现这一点:
通过适当的搜索,我们可能会发现更多。
然后,Python程序使用第2部分中的技术之一或其等效技术来加载和调用使用本答案第1部分中的技术创建的GPU“内核”。
编辑
您可以在GPU上生成完整的“蛮力”值集和md5哈希。然后使用Python检索结果。它可能比用Python生成值并传递给GPU,然后检索md5更简单。
理解后,程序会生成1个字符、2个字符、3个字符、4个字符、5个字符、6个字符的所有小写字符串,并生成md5 hash。
我之前的分析是完全错误的,我道歉。
Edit3:SkimmingWikipedia MD5似乎优化了固定长度字符串(例如,6个ASCII字符)的MD5计算。
根据维基百科的伪代码,只有64个循环,16个循环的迭代组使用的是同样的算法。因此,如果键小于55字节,计算中心可以从以下位置“扩展”:对于I从0到63。
如果0是15,那么
f:=(bandc ) or ) (notb ) and)).
g :=i
else if 16 i 31
f:=(dandb ) or ) (notd)和c)).
g:=(5I1 ) mod 16
else if 32 i 47
f :=b异或c异或d
g:=(3I5 ) mod 16
else if 48 i 63
f:=cxor(bor ) notd))
g:=(7I ) mod 16
温度:=d
d :=c
丙:=乙
b:=bleftrotate () afk[I]w[g],r[i])
答:=温度
结束于
()//i==0
f:=(bandc ) or ) ) notb ) and )//4 ops
//g :=i
温度:=d
d :=c
丙:=乙
b:=bleftrotate () afk[0]w[0])、r[0]//9 ops
答:=温度
//i==1
f:=(bandc ) or ) (notb ) and)).
//g :=i
温度:=d
d :=c
丙:=乙
b:=bleftrotate () afk[1]w[1],r[1])
答:=温度
这种扩展将使一些数组索引保持不变,并允许优秀的GPU编译器执行更恒定的传播。这可能导致显著的改进。由于每一步大约有9次运算,编译器需要对5条数据进行加扰,所以大约需要14次运算/步*64,大约1000次运算。
编辑4:
开心!我看过更多维基百科的MD5算法,——MD5,比我想象的更容易被攻击。每组16个中只有前两个循环直接使用6字节的变量密钥串,其余的字符串都是常量。算法的其余部分是混洗和位运算,这可能需要非常重要的进一步优化。每16个周期中只有2个周期涉及键,可能快8倍,甚至快4倍以上。
所以它运行在1GHz频率而不是1024核GPU,提供4096/微秒或8096/us=4-8美豚/纳秒而不是1024美豚/微秒。
大概有27 ^ 6个密钥=387420489个密钥,所以有md5 hash。
37420489键/4-8/纳秒=0.05-0.1秒
主机和GPU的通信速度比较慢,但不太可能超过100%。
在大约0.1秒和0.2秒之间。
美丽海豚Md5是16字节,所以需要6.2 GB保存。对于现代的两个GPU来说,一个GPU只需要两次传输,但是开销非常大。如果clean dolphin值存储在磁盘上,由SSD使用或通过10Gbit以太网移动,clean dolphin代将在I/O时间内泛滥。
每6个ASCII字符的键,因为只能打印94个ASCII字符:
94 6=689869781056键/4-8/纳秒=86-172秒
哦,天啊!-(1) ())))))).
长密钥,有比MD5更好的!
试着写一个生成最好的GPU算法的Python程序怎么样?
当Python程序“展开”循环生成GPU“内核”文本并打印直线计算文本时,所有常数都将被输入到。
然后,尝试找到计算每个密钥长度的MD5的最佳指令序列。使用扩展程序跟踪每个位的操作和依赖关系,并尝试将这些位及其操作重新组合成一个连续的32位字和一个新的直线计算。(平心而论,GPU编译器或许可以做到这一点?可能会很有趣)
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。