2016-05-04 41 views
-2

C++头结构我知道,这个问题可能已经问过,但我找不到特别回答我的问题所以在这里不言而喻的答案...使用了CUDA代码

的问题是非常简单的,我正在尝试为CUDA(.cu/.cuh)代码使用C++样式头。

//MyClass.cuh 
#ifndef MY_CLASS 
#define MY_CLASS 
#include ...cuda.h, etc. 
class MyClass 
{ 
    public: 
     void myFunction(); 
    private: 
     __global__ void myKernel(); 
} 
#endif 

//MyClass.cu 
#include "MyClass.cuh" 
void MyClass::myFunction() 
{ 
    //myFunction definition... 
} 

__global__ void MyClass::myKernel() 
{ 
    //myKernel definition... 
} 

这项工作?

回答

1

不,这是行不通的:

class MyClass 
{ 
    ... 
     __global__ void myKernel(); 

编译器不会让你定义一个类成员函数是__global__功能(尝试)。即使你可以,设备上运行的这样的函数也不具有对其他类数据或函数成员的通常类访问权限。所以通常的建议是将你的内核定义声明在类的范围之外,并且在调用内核的类中有一个包装成员函数。

一些额外的讨论是herehere