CUDA and Classes

前端 未结 2 530
刺人心
刺人心 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.

    0 讨论(0)
  • 2020-11-29 18:23

    Another good resource for this question are some of the code examples that come with the CUDA toolkit. Within these code samples you can find examples of just about any thing you could imagine. One that is pertinent to your question is the quadtree.cu file. Best of luck.

    0 讨论(0)
提交回复
热议问题