CUDA
と を組み合わせ__device__
て、と の__host__
両方から関数を呼び出すことができます。device
host
私の質問は次のとおりです。またはを定義するだけで、両方を使用することが本当に望ましい例はあります__device__
か__host__
?
正規の例は、CUDAでC++クラスを使用することです。CUDA C ++モデルでは、クラスをデバイスとホストの両方のメモリスペースでインスタンス化する場合、クラスのすべてのメンバー関数をホストとデバイスの両方のコードで定義する必要があります。
最も単純なケースは、些細なクラスです。
class example
{
public:
float a, b;
example(float _a, float _b) : a(_a), b(_b) {};
}
これをCUDAのクラスで使用することはできません。デバイスとホストの両方のコードでコンストラクターを定義する必要があるため、次のようになります。
class example
{
public:
float a, b;
__device__ __host__
example(float _a, float _b) : a(_a), b(_b) {};
}