ядер numba cuda ничего не возвращают . Вы должны вернуть результаты через параметры / аргументы функции. Отправной точкой для этого обычно является какой-то пустой массив. Вот пример:
$ cat t44.py
from numba import cuda
import numpy as np
@cuda.jit
def product(rho, theta, x):
x[0] = rho * (theta)
x = np.ones(1,dtype=np.float32)
product(1,2,x)
print(x)
$ python t44.py
[ 2.]
$
Есть потенциально много других вещей, которые можно было бы сказать; Вы можете воспользоваться документацией, указанной выше, или, например, этот урок . Обычно вам нужно решить задачи, которые намного больше, чем умножение двух скаляров, прежде чем вычисления на GPU будут интересны.
Кроме того, numba предоставляет другие методы для доступа к вычислениям на GPU, которые не зависят от использования декоратора @cuda.jit
. Эти методы, такие как @vectorize
, документированы.
Я также опускаю любой синтаксис конфигурации запуска ядра при вызове product
. Это допустимо в Numba Cuda, но это приводит к запуску ядра из 1 блока, который содержит 1 поток. Это работает для данного конкретного примера, но это в основном бессмысленный способ использования графических процессоров CUDA.