【发布时间】:2013-06-13 18:55:31
【问题描述】:
我正在尝试使用 NumbaPro 的 cuda 扩展来乘以大型数组矩阵。我最终想要的是将大小为 NxN 的矩阵乘以一个对角矩阵,该矩阵将作为一维矩阵输入(因此,a.dot(numpy.diagflat(b)) 我发现它是 a 的同义词* b)。但是,我收到了一个未提供任何信息的断言错误。
如果我将两个一维数组矩阵相乘,我只能避免这个断言错误,但这不是我想要做的。
from numbapro import vectorize, cuda
from numba import f4,f8
import numpy as np
def generate_input(n):
import numpy as np
A = np.array(np.random.sample((n,n)))
B = np.array(np.random.sample(n) + 10)
return A, B
def product(a, b):
return a * b
def main():
cu_product = vectorize([f4(f4, f4), f8(f8, f8)], target='gpu')(product)
N = 1000
A, B = generate_input(N)
D = np.empty(A.shape)
stream = cuda.stream()
with stream.auto_synchronize():
dA = cuda.to_device(A, stream)
dB = cuda.to_device(B, stream)
dD = cuda.to_device(D, stream, copy=False)
cu_product(dA, dB, out=dD, stream=stream)
dD.to_host(stream)
if __name__ == '__main__':
main()
这是我的终端输出的内容:
Traceback (most recent call last):
File "cuda_vectorize.py", line 32, in <module>
main()
File "cuda_vectorize.py", line 28, in main
cu_product(dA, dB, out=dD, stream=stream)
File "/opt/anaconda1anaconda2anaconda3/lib/python2.7/site-packages/numbapro/_cudadispatch.py", line 109, in __call__
File "/opt/anaconda1anaconda2anaconda3/lib/python2.7/site-packages/numbapro/_cudadispatch.py", line 191, in _arguments_requirement
AssertionError
【问题讨论】:
-
你不能在第 191 行检查
_cudadispatch.py以了解断言的确切内容吗? -
不幸的是它只作为编译版本存在。当我未编译它时,行号是不同的,但据我所知,harrism 是正确的,因为它不是标量输入而导致错误被抛出。我还想指出唯一有效的反编译器是在回答这个问题时发现的 Decompyle++ [1]。此外,文件位置是“~/anaconda/lib/...”而不是“/opt/anaconda1anaconda2anaconda3/...”[1]:stackoverflow.com/questions/8189352/decompile-python-2-7-pyc
-
啊,封闭源代码库的乐趣...祝你好运!
标签: python numpy anaconda numba numba-pro