Вызов других функций из функции @ cuda.jit numba - PullRequest
0 голосов
/ 06 мая 2019

У меня есть функция, к которой я добавил декоратор @ cuda.jit.

@cuda.jit
def foo(x):
   bar(x[0])
   bar(x[1])
   bar(x[2])

def bar(x):
  # Some routine

Я бы не хотел копировать bar в тело foo, так как это делает код неуклюжим и уродливым.

Как Numba cuda.jit справляется с этим? Является ли функция встроенной во время компиляции? Нужно ли соединять бар?

Если это так, он будет вызывать другие потоки, и я считаю, что это излишне для вычислений только над 3 элементами ...

Я также думаю, что ядро ​​cuda не может вызывать и другие ядра cuda. ​​

Я новичок в numba / cuda, так что извините, если здесь есть какая-то фундаментальная ошибка в понимании.

1 Ответ

2 голосов
/ 06 мая 2019

Как cumba.jit Нумбы справляется с этим?

Это не так.Вы получите сообщение об ошибке, если попытаетесь

Встроена ли функция во время компиляции?

Нет.

Нужно ли соединять стержень?

Да.Он должен быть украшен @cuda.jit(device=True)

Если это так, он вызовет другие потоки, и я считаю, что это излишне для вычислений только над 3 элементами ...

Нет.Функция устройства и ядро ​​- это не одно и то же.Код для функции устройства компилируется и генерируется, который является «однопоточным».

Я также думаю, что ядро ​​cuda не может также вызывать другие ядра cuda. ​​

Может, но Нумба в настоящее время не поддерживает его.

...