Объявление объектов CPP внутри ядра cuda

0

Я новичок в Cuda, и мне нужно знать его пределы перед запуском моего проекта C++ через Cuda. Предположим, у меня есть класс C++ MyClass. Зная, что Cuda использует C99, можно ли объявить объект типа MyClass внутри ядра? Будет ли уместен нижеприведенный фрагмент кода?

_global__ void SolveBlaBlaBLa(int x, ...)
{

MyClass obj1;
.
.
.
}

Спасибо, Advance, - Ruru

  • 1
    CUDA не использует C99 в качестве основы, она следует за C90, к которому было добавлено значительное количество возможностей языка C ++ 98.
  • 1
    Если MyClass имеет только __host__ конструктор и деструктор, ваш код будет недопустимым. Вам нужно будет убедиться, что они __device__ или __host__ __device__ .
Показать ещё 1 комментарий
Теги:
oop
cuda

1 ответ

3

Просто предоставляя ответ, чтобы получить это из списка без ответа. Я думаю, @JaredHoberock не будет возражать.

В общем, CUDA поддерживает большой набор функций C++, включая поддержку объектов в коде устройства.

Однако любой код, который выполняется на устройстве, должен быть правильно оформлен. Для обычных отдельных функций (не ядер) декоратор, который распознает компилятор для создания вызываемой пользователем версии кода, является __device__. Это относится к любому объекту, который может использоваться на устройстве, включая конструкторы и деструкторы.

Вы также можете ознакомиться с другими ограничениями на классы C++, используемые в коде устройства, как описано в руководстве по программированию.

  • 0
    Спасибо за ваш ответ, @RobertCrovella. Я не понимаю причину украшения объекта внутри устройства! Не лучше ли, чтобы компилятор позаботился об этом? Потому что объект уже объявлен внутри устройства или снаружи. Я могу позаботиться обо всех ограничениях, чтобы объекты хорошо компилировались как на CPU, так и на GPU.
  • 0
    Украшение сделано в точке определения класса. Не тогда, когда вы создаете экземпляр объекта. Для создания экземпляра объекта не требуется никакого дополнительного украшения. Если вы позаботитесь об этом ограничении (декорирование методов в точке определения класса), тогда оно должно работать нормально, независимо от того, создан ли он в коде хоста или коде устройства.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню