3

CUDAと を組み合わせ__device__て、と の__host__両方から関数を呼び出すことができます。devicehost

私の質問は次のとおりです。またはを定義するだけで、両方を使用することが本当に望ましい例はあります__device____host__?

4

1 に答える 1

5

正規の例は、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) {};
}
于 2012-11-27T16:42:34.830 に答える