我正在尝试创建一个程序,能够创建 x 个字符串,然后使用 SHA-256 对它们进行哈希处理。我在 python 3.8.6 中这样做。我的代码在我的 CPU 上运行良好,但我很想展示 CPU 和 GPU 在执行重复任务时在速度方面的差异。
现在看起来像这样:
import hashlib
import string
import random
import time
from multiprocessing import Pool
from numba import jit
#@jit(nopython=True)
def strings(b):
x = ''.join(random.choice(string.ascii_letters + string.digits) for _ in range(120))
return x
@jit(nopython=True)
def hasha(a):
kette = a
encoded = kette.encode()
result = hashlib.sha256(encoded)
hex = result.hexdigest()
return hex
if __name__ == '__main__':
pool = Pool()
start_time = time.time()
c = pool.map(strings, range(0, 100000))
pool.map(hasha, c)
pool.close()
pool.join()
print("--- %s seconds ---" % (time.time() - start_time))
我找到了 numba 并了解到它可以编译代码以在 GPU 上运行。经过一段时间的尝试后,我无法想出适合我的 numba 代码。 我得到的第一个错误是:“不支持在闭包中使用yield。”。我“修复”了这个问题,没有用 numba 编译 strings() 函数。
第二个错误发生在 hasha() 中,如下所示:“Unknown attribute 'encode' of type unicode_type”
我的猜测是,numba 不知道我正在使用的一些功能。
我说得对吗,还是还有其他问题?有没有人知道 numba 甚至其他任何东西(除了 numba)的解决方法,我可以展示几乎相同的代码如何在 GPU 上运行得更快? 请注意,我没有 nvidia GPU,我使用 AMD RX580,所以根据我的理解,我无法使用 Cuda 的任何东西。
我也尝试使用 pyopencl 但我无法真正使用它。
谢谢! 谨致问候!
因为 numba 还不支持 hashlib。 您可以编写自己的 GPU 版本的 SHA256 函数。