El Apéndice D de la versión 3.2 de la documentación de CUDA se refiere a la compatibilidad con C++ en el código de dispositivo CUDA.
Se menciona claramente que CUDA admite "Clases para dispositivos de capacidad informática 2.x". Sin embargo, estoy trabajando con dispositivos de capacidad informática 1.1 y 1.3 y puedo usar esta función.¿Cuáles son las construcciones de lenguaje C++ reales compatibles con el código de dispositivo CUDA?
Por ejemplo, este código funciona:
// 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();
}
también soy capaz de utilizar las bibliotecas extensas tales como empuje :: clases de generación aleatoria al azar. Mi única conjetura es que puedo hacerlo gracias a la función de marcado automático de la función marcada __device__
, pero esto no explica el manejo de las variables miembro.
¿Alguna vez ha utilizado estas características en las mismas condiciones, o puede explicarme por qué mi código CUDA se comporta de esta manera? ¿Hay algo mal en la guía de referencia?
Tu respuesta trae puntos interesantes sobre las limitaciones. La necesidad de tiempo de compilación parece ser el punto a tener en cuenta cuando se trabaja con dispositivos de capacidad informática <2.X. – jopasserat
Después de haber investigado el problema, no puedo (y probablemente no encuentre) encontrar una respuesta mejor que la tuya. Por lo tanto, confío en tu experiencia :) De todos modos, ahora tengo un C2050 \ o/así que puedo comparar mis ejecuciones para asegurarme de que mi código siga siendo portátil. Gracias por tu respuesta @ CygnusX1 – jopasserat