Приложение D к версии 3.2 документации CUDA ссылается на поддержку C ++ в коде устройства CUDA.
Очевидно, что CUDA поддерживает «Классы для устройств с вычислительными возможностями 2.x».Тем не менее, я работаю с устройствами с вычислительными возможностями 1.1 и 1.3 и могу использовать эту функцию!
Например, этот код работает:
// class definition voluntary simplified
class Foo {
private:
int x_;
public:
__device__ Foo() { x_ = 42; }
__device__ void bar() { return x_; }
};
//kernel using the previous class
__global__ void testKernel(uint32_t* ddata) {
Foo f;
ddata[threadIdx.x] = f.bar();
}
Я также могу использоватьшироко распространенные библиотеки, такие как классы Thrust :: random random random.Мое единственное предположение, что я могу сделать это благодаря автоматическому встраиванию отмеченной функции __device__
, но это не объясняет обработку переменных-членов с помощью.
Вы когда-нибудь использовали такие функции в одинаковых условиях, или вы можете объяснить мне, почему мой код CUDA ведет себя так?Что-то не так в справочном руководстве?