Я пытаюсь использовать расширение cuda NumbaPro для умножения массивов больших массивов. В конце концов, я хочу умножить матрицу размера NxN на диагональную матрицу, которая будет подаваться в виде 1D матрицы (таким образом, a.dot (numpy.diagflat (b)), который, как я нашел, является синонимом * b). Однако, я получаю ошибку утверждения, которая не предоставляет никакой информации.Ошибка Anbaonda's NumbaPro CUDA Assertion Error
Я могу избежать этой ошибки утверждения, если я умножаю две матрицы массива 1D, но это не то, что я хочу сделать.
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
не могли бы вы проверить '_cudadispatch.py' на линии 191, чтобы увидеть, что утверждение именно? – BenC
К сожалению, он существует только как скомпилированная версия. Когда я скомпилировал его, номера строк были разными, но из того, что я могу сказать, неверно, что ошибка возникает из-за того, что она не является скалярным вводом. Я также хочу отметить, что единственным декомпилятором, который работал, был Decompyle ++, найденный в ответ на этот вопрос [1]. Кроме того, расположение файла было «~/anaconda/lib/...», а не «/ opt/anaconda1anaconda2anaconda3/..." [1]: http://stackoverflow.com/questions/8189352/decompile-python-2-7-pyc – brebs
А, радость закрытых библиотек-источников ... Удачи тогда! – BenC