Python 中的 Numba 可实现更快的散列

问题描述 投票:0回答:1

我正在尝试创建一个程序,能够创建 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 但我无法真正使用它。

谢谢! 谨致问候!

python hash numba
1个回答
0
投票

因为 numba 还不支持 hashlib。 您可以编写自己的 GPU 版本的 SHA256 函数。

© www.soinside.com 2019 - 2024. All rights reserved.