Приложение 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 классы случайной генерации. Мое единственное предположение состоит в том, что я могу сделать это благодаря автоматическому встраиванию помеченной __device__
функции, но это не объясняет также обработку переменных-членов.
Вы когда-нибудь использовали такие возможности в таких же условиях, или вы можете объяснить мне, почему мой код CUDA ведет себя именно так? Что-то не так в справочнике?