Функция устройства NumaPro Cuda - возврат нескольких массивов и локальной памяти

Кто-нибудь знает, каков правильный синтаксис декоратора cuda.jit, если вы хотите написать функцию устройства, которая возвращает несколько массивов?

Если моя функция устройства должна возвращать одно число с плавающей запятой и иметь два целочисленных параметра, мой декоратор будет:

@cuda.jit('float64(int64,int64)', device=True, inline=True)

Теперь я хочу, чтобы моя функция принимала два целочисленных параметра и два числа с плавающей запятой и возвращала 2 массива чисел с плавающей запятой и 2 массива целых чисел одинаковой длины (между 3 и 5), которая зависит от входных аргументов. Как я могу это сделать? Будет ли это правильно:

@cuda.jit(restype=[float64[:], int64[:], float64[:], int64[:]], argtypes=[int64, int64, float64, float64], device=True, inline = True)

Также в моей функции я бы создал массивы, которые хочу вернуть, используя: cuda.local.array() Поскольку я использую inline=True, я подозреваю, что это сработает, и массивы будут доступны только соответствующему потоку, верно?


person Escapado    schedule 02.11.2015    source источник


Ответы (1)


Теперь я хочу, чтобы моя функция принимала два целочисленных параметра и два числа с плавающей запятой и возвращала 2 массива чисел с плавающей запятой и 2 массива целых чисел.

На самом деле вы говорите, что хотите, чтобы ваше JIT-ядро возвращало кортеж (из двух массивов). К сожалению, в интерфейсе nopython я не считаю, что это законно. В nopython нет поддержки объектов, поэтому вы не можете создать экземпляр и вернуть объект кортежа.

Также в моей функции я бы создал массивы, которые хочу вернуть, используя: cuda.local.array()

К сожалению, это тоже не поддерживается. Допустимо только возвращать массив, который был передан функции в качестве аргумента.

person Community    schedule 02.11.2015
comment
Спасибо за ваш ответ! Таким образом, мой единственный вариант - заранее передать массивы в качестве аргументов, но иметь несколько функций устройства для вычисления записей этих массивов и возврата одного массива для каждой функции устройства? - person Escapado; 02.11.2015
comment
@Escapado: я бы не подумал, что это очень целесообразно, просто с точки зрения эффективности. Почему бы не вернуть результаты в разных срезах одного и того же массива? - person talonmies; 02.11.2015
comment
Это, вероятно, имело бы больше смысла. Но я придумал совершенно другую схему для решения своей проблемы, поэтому в моем коде это все равно не применимо. Но вы, наверное, правы! - person Escapado; 03.11.2015