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