PyCUDA Передача переменной по значению в ядро - PullRequest
4 голосов
/ 19 апреля 2011

должно быть достаточно просто; Я буквально хочу отправить int в объявление ядра SourceModule, где функция C

__global__......(int value,.....)

с объявленным и вызванным значением ...

value = 256
...
...
func(value,...)

Но я получаю множество ошибок от Pycuda, что я использую неправильный тип.

1 Ответ

9 голосов
/ 19 апреля 2011

Стандартный интерфейс функции PyCUDA требует, чтобы аргумент имел несколько dtypes, потому что он внутренне выполняет сопоставление с типами C под капотом.Так что для скалярных аргументов, которые передаются по значению, вам нужно сначала «привести» к подходящему numpy dtype.Что-то вроде

value = 256
va = numpy.int32(value)

func(va)

должно работать.Если вы передаете значения или массивы с плавающей запятой одинарной точности, обязательно используйте dtype типа np.float32, потому что numpy по умолчанию использует двойную точность, и вы получите подобные ошибки.

...