Я новичок в Cuda, и мне нужно знать его пределы перед запуском моего проекта C++ через Cuda. Предположим, у меня есть класс C++ MyClass. Зная, что Cuda использует C99, можно ли объявить объект типа MyClass внутри ядра? Будет ли уместен нижеприведенный фрагмент кода?
_global__ void SolveBlaBlaBLa(int x, ...)
{
MyClass obj1;
.
.
.
}
Спасибо, Advance, - Ruru
Просто предоставляя ответ, чтобы получить это из списка без ответа. Я думаю, @JaredHoberock не будет возражать.
В общем, CUDA поддерживает большой набор функций C++, включая поддержку объектов в коде устройства.
Однако любой код, который выполняется на устройстве, должен быть правильно оформлен. Для обычных отдельных функций (не ядер) декоратор, который распознает компилятор для создания вызываемой пользователем версии кода, является __device__
. Это относится к любому объекту, который может использоваться на устройстве, включая конструкторы и деструкторы.
Вы также можете ознакомиться с другими ограничениями на классы C++, используемые в коде устройства, как описано в руководстве по программированию.
MyClass
имеет только__host__
конструктор и деструктор, ваш код будет недопустимым. Вам нужно будет убедиться, что они__device__
или__host__ __device__
.