CUDA and Classes

前端 未结 2 529
刺人心
刺人心 2020-11-29 17:51

I\'ve searched all over for some insight on how exactly to use classes with CUDA, and while there is a general consensus that it can be done and apparently is being done by

2条回答
  •  自闭症患者
    2020-11-29 18:11

    Define the class in a header that you #include, just like in C++.

    Any method that must be called from device code should be defined with both __device__ and __host__ declspecs, including the constructor and destructor if you plan to use new/delete on the device (note new/delete require CUDA 4.0 and a compute capability 2.0 or higher GPU).

    You probably want to define a macro like

    #ifdef __CUDACC__
    #define CUDA_CALLABLE_MEMBER __host__ __device__
    #else
    #define CUDA_CALLABLE_MEMBER
    #endif 
    

    Then use this macro on your member functions

    class Foo {
    public:
        CUDA_CALLABLE_MEMBER Foo() {}
        CUDA_CALLABLE_MEMBER ~Foo() {}
        CUDA_CALLABLE_MEMBER void aMethod() {}
    };
    

    The reason for this is that only the CUDA compiler knows __device__ and __host__ -- your host C++ compiler will raise an error.

    Edit: Note __CUDACC__ is defined by NVCC when it is compiling CUDA files. This can be either when compiling a .cu file with NVCC or when compiling any file with the command line option -x cu.

提交回复
热议问题