2016-05-04 7 views
-2

Ich weiß, dass diese Frage wahrscheinlich gefragt wurde, aber ich kann nicht eine Antwort, die besonders beantwortet meine Frage so geht es hier ...Verwendung von C++ Header-Struktur für CUDA Code

Die Frage ist recht einfach finden, Ich versuche, einen C++ - Stil-Header für CUDA (.cu/.cuh) -Code zu verwenden.

//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... 
} 

Funktioniert das?

Antwort

1

Nein, das wird nicht funktionieren:

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

der Compiler lassen Sie nicht eine Klasse Member-Funktion definieren, die eine ist __global__ Funktion (versuchen Sie es). Selbst wenn Sie könnten, hätte eine solche Funktion, die auf dem Gerät ausgeführt wird, nicht den üblichen Klassenzugriff auf andere Klassendaten oder Funktionselemente. Daher ist es üblich, dass Sie Ihre Kernel-Definition außerhalb des Bereichs der Klasse deklarieren und eine Wrapper-Member-Funktion in der Klasse haben, die den Kernel aufruft.

Einige weitere Diskussion ist here und here