Правила для аргументов ядра являются логическим следствием правил передачи параметров C ++ и того факта, что память устройства и хоста физически разделены.
CUDA не позволяет передавать аргументы по ссылке, и вы должны быть осторожны с указателями.
В частности, вы должны передавать параметры по значению.Передача пользовательских типов требует, чтобы конструктор копирования по умолчанию или ваш собственный конструктор копирования (если он есть) не содержал выделения памяти (выделения кучи с помощью «new» или «malloc»).
В общем, передача по значению хорошо работает для целочисленных, плавающих или других примитивных типов и простых плоских определяемых пользователем структур или объектов классов.