Numba:目标错误=" cuda"但适用于target =" cpu"

时间:2017-05-17 19:59:38

标签: python anaconda nvidia numba

我正在编写一个程序来在我的Nvidia GPU上进行矩阵计算。

目前,我正在实施给定链接中的视频中显示的示例:CUDACasts Episode #11: GPU Libraries for CUDA Python

在此视频之后,我关注了Anaconda的文档,并了解 NumbaPro 库已被弃用,因此我使用了 Numba 库。

我有一个像这样的工作python代码:

from numba import vectorize
import numpy as np

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

def main():
    a = np.matrix(np.random.random([10000, 10000]), dtype=np.float32)
    b = np.matrix(np.random.random([10000, 10000]), dtype=np.float32)
    c = add(a, b)
    print(c.shape)

if __name__ == "__main__":
    main()

但是当我在行 4 中更改target='cuda'时会出错。

我安装了cudalib和其他必需的库和SDK。

回溯:

Traceback (most recent call last):
File "main.py", line 21, in <module>
    main()
File "main.py", line 15, in main
    c = add(a, b)
File "/home/noisymonk/anaconda3/lib/python3.6/site-packages/numba/cuda/dispatcher.py", line 88, in __call__
    return CUDAUFuncMechanism.call(self.functions, args, kws)
File "/home/noisymonk/anaconda3/lib/python3.6/site-packages/numba/npyufunc/deviceufunc.py", line 300, in call
    cr.launch(func, shape[0], stream, devarys)
File "/home/noisymonk/anaconda3/lib/python3.6/site-packages/numba/cuda/dispatcher.py", line 197, in launch
    func.forall(count, stream=stream)(*args)
File "/home/noisymonk/anaconda3/lib/python3.6/site-packages/numba/cuda/compiler.py", line 248, in __call__
    kernel = self.kernel.specialize(*args)
File "/home/noisymonk/anaconda3/lib/python3.6/site-packages/numba/cuda/compiler.py", line 717, in specialize
    **self.targetoptions)
File "/home/noisymonk/anaconda3/lib/python3.6/site-packages/numba/cuda/compiler.py", line 37, in core
    return fn(*args, **kwargs)
File "/home/noisymonk/anaconda3/lib/python3.6/site-packages/numba/cuda/compiler.py", line 75, in compile_kernel
    cres = compile_cuda(pyfunc, types.void, args, debug=debug, inline=inline)
File "/home/noisymonk/anaconda3/lib/python3.6/site-packages/numba/cuda/compiler.py", line 37, in core
    return fn(*args, **kwargs)
File "/home/noisymonk/anaconda3/lib/python3.6/site-packages/numba/cuda/compiler.py", line 64, in compile_cuda
    locals={})
File "/home/noisymonk/anaconda3/lib/python3.6/site-packages/numba/compiler.py", line 693, in compile_extra
    return pipeline.compile_extra(func)
File "/home/noisymonk/anaconda3/lib/python3.6/site-packages/numba/compiler.py", line 350, in compile_extra
    return self._compile_bytecode()
File "/home/noisymonk/anaconda3/lib/python3.6/site-packages/numba/compiler.py", line 658, in _compile_bytecode
    return self._compile_core()
File "/home/noisymonk/anaconda3/lib/python3.6/site-packages/numba/compiler.py", line 645, in _compile_core
    res = pm.run(self.status)
File "/home/noisymonk/anaconda3/lib/python3.6/site-packages/numba/compiler.py", line 236, in run
    raise patched_exception
File "/home/noisymonk/anaconda3/lib/python3.6/site-packages/numba/compiler.py", line 228, in run
    stage()
File "/home/noisymonk/anaconda3/lib/python3.6/site-packages/numba/compiler.py", line 442, in stage_nopython_frontend
    self.locals)
File "/home/noisymonk/anaconda3/lib/python3.6/site-packages/numba/compiler.py", line 794, in type_inference_stage
    infer.propagate()
File "/home/noisymonk/anaconda3/lib/python3.6/site-packages/numba/typeinfer.py", line 767, in propagate
    raise errors[0]
File "/home/noisymonk/anaconda3/lib/python3.6/site-packages/numba/typeinfer.py", line 128, in propagate
    constraint(typeinfer)
File "/home/noisymonk/anaconda3/lib/python3.6/site-packages/numba/typeinfer.py", line 379, in __call__
    self.resolve(typeinfer, typevars, fnty)
File "/home/noisymonk/anaconda3/lib/python3.6/site-packages/numba/typeinfer.py", line 401, in resolve
    raise TypingError(msg, loc=self.loc)
numba.errors.TypingError: Failed at nopython (nopython frontend)
Invalid usage of Function(<DeviceFunction py_func=<function add at 0x7f8578f96b70> signature=(float32, float32) -> float32>) with parameters (array(float32, 1d, A), array(float32, 1d, A))
Known signatures:
* (float32, float32) -> float32
File "<string>", line 5
[1] During: resolving callee type: Function(<DeviceFunction py_func=<function add at 0x7f8578f96b70> signature=(float32, float32) -> float32>)
[2] During: typing of call at <string> (5)

0 个答案:

没有答案