Какие настоящие языковые конструкции C ++ поддерживаются кодом устройства CUDA?

Приложение 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 ведет себя именно так? Что-то не так в справочном руководстве?

10
задан jopasserat 5 February 2011 в 08:54
поделиться