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