Я пытаюсь суммировать значения массива внутри CUDA-компилируемой функции Numba.
У меня есть простой тестовый код, например:
import numpy as np
from numba import cuda
values = np.zeros(100, dtype=np.float64)
values.fill(1)
@cuda.jit
def try_to_sum(arr):
print(arr.sum())
d_values = cuda.to_device(values)
cuda.synchronize()
try_to_sum[1, 1](d_values)
The do c говорит, что это поддерживаемая функция:
Но она не работает с:
Failed in nopython mode pipeline (step: nopython frontend)
Use of unsupported NumPy function 'numpy.nditer' or unsupported use of the function.
File "../../anaconda3/envs/GpuVM/lib/python3.8/site-packages/numba/np/arraymath.py", line 167:
def array_sum_impl(arr):
<source elided>
c = zero
for v in np.nditer(arr):
^
During: typing of get attribute at /home/stark/anaconda3/envs/GpuVM/lib/python3.8/site-packages/numba/np/arraymath.py (167)
File "../../anaconda3/envs/GpuVM/lib/python3.8/site-packages/numba/np/arraymath.py", line 167:
def array_sum_impl(arr):
<source elided>
c = zero
for v in np.nditer(arr):
^
During: lowering "$8call_method.3 = call $6load_method.2(func=$6load_method.2, args=[], kws=(), vararg=None)" at /home/stark/Work/mmr-evolution-gpu/xtests.py (10)
Я также пробовал использовать np.cumsum(arr)
, но не получилось:
numba.core.errors.TypingError: Failed in nopython mode pipeline (step: nopython frontend)
Use of unsupported NumPy function 'numpy.cumsum' or unsupported use of the function.
File "xtests.py", line 10:
def try_to_sum(arr):
np.cumsum(arr)
^
Как я могу сделать простую сумму 1d-массива, содержащего значения float64 внутри ядра CUDA?
Спасибо!