0

我运行了我在 CUDA Python 介绍页面上阅读的这段代码:-

import numpy as np
from timeit import default_timer as timer
from numbapro import vectorize

@vectorize(["float32(float32, float32)"], target='gpu')
def VectorAdd(a, b):
        return a + b

def main():
    N = 32000000

    A = np.ones(N, dtype=np.float32)
    B = np.ones(N, dtype=np.float32)
    C = np.zeros(N, dtype=np.float32)

    start = timer()
    C = VectorAdd(A, B)
    vectoradd_timer = timer() - start

    print("C[:5] = " + str(C[:5]))
    print("C[-5:] = " + str(C[-5:]))

    print("VectorAdd took %f seconds" % vectoradd_timer)

if __name__ == '__main__':
    main()

我在终端上收到以下错误:-

dtn34@dtn34-ubuntu:~/Python$ python asd.py
Traceback (most recent call last):
  File "asd.py", line 3, in <module>
    from numbapro import vectorize
ImportError: No module named numbapro

它应该使用 gpu 运行代码,但我得到了那个错误。我已经安装了 anaconda,更新了 conda,使用 conda 安装了加速,安装了 cudatoolkit,使用 conda 安装了 numba。我尝试使用 python2 和 python3 编译它

我该怎么办?

4

2 回答 2

8

知道了。正如 WarrenWeckesser 和 Robert Crovella 所指出的,NumbaPro 已被弃用,所有功能都已移至 numba。所以你应该写 numba 而不是 numbapro

from numba import vectorize

还需要将目标设置为“cuda”而不是“gpu”

@vectorize(["float32(float32, float32)"], target='cuda')
def VectorAdd(a, b):
        return a + b
于 2018-01-18T16:56:52.920 回答
0

修改后我尝试在(CPU和GPU)都运行它,CPU比GPU快

CPU中的第一个:

import numpy as np
from timeit import  default_timer as timer
# from numba import vectorize
# @vectorize(["float32(float32, float32)"], target='cuda')

def VectorAdd(a ,b):
    return a + b

def main():
    N = 32000000
    A = np.ones(N, dtype=np.float32)
    B = np.ones(N, dtype=np.float32)
    C = np.ones(N, dtype=np.float32)

    srart = timer()
    C = VectorAdd(A,B)
    vectoradd_time = timer() - srart
    print ("C[:5] = " + str(C[:5]))
    print ("C[:-5] = " + str(C[:-5]))
    print ('vectoradd_time %f second' % vectoradd_time)
if __name__== '__main__':
    main()

时间:

vectoradd_time 0.046457 second

GPU中的第二个:

import numpy as np
from timeit import default_timer as timer
from numba import vectorize

@vectorize(["float32(float32, float32)"], target='cuda')


def VectorAdd(a, b):
        return a + b

def main():
    N = 32000000

    A = np.ones(N, dtype=np.float32)
    B = np.ones(N, dtype=np.float32)
    C = np.zeros(N, dtype=np.float32)

    start = timer()
    C = VectorAdd(A, B)
    vectoradd_timer = timer() - start

    print("C[:5] = " + str(C[:5]))
    print("C[-5:] = " + str(C[-5:]))

    print("VectorAdd took %f seconds" % vectoradd_timer)

if __name__ == '__main__':
    main()

时间:

VectorAdd took 0.240731 seconds

此结果取决于您的 CPU 的规格。

于 2019-10-25T07:03:24.897 回答