0
私は現在のプロジェクトでCUDAを使用しており、CPUとGPUカーネルを1つの実装で維持する必要があります。#defineの#ifに最適な代替手段
__device__ __host__
で機能にタグを付けることはできますが、デバイス専用機能を使用する必要がある場合は、コードを分割することはできません。だから、私は、次の解決策が出ている:
template <bool IsOnDevice>
#if IsOnDevice
__device__
#else
__host__
#endif
...the rest of the function header
さて、私は、このようなしかし
//Macro:
#define DEVICE_FUNCTION \
template <bool IsOnDevice> \
#if IsOnDevice \
__device__ \
#else \
__host__ \
#endif
//Example function:
DEVICE_FUNCTION
...the rest of the function header
として、この部分をカプセル化するための#defineでこのコードを配置したいと思い、これは」doesnの他の前処理をマクロに含めることができないので、コンパイルしないでください。トークンはIsOnDeviceはコンパイル時に知られているにもかかわらずDEVICE_FUNCTION_IsOnDeviceとして解決さとして、私はまた、運で
#DEVICE_FUNCTION_true __device__
#DEVICE_FUNCTION_false __host__
#DEVICE_FUNCTION_RESOLVER(flag) DEVICE_FUNCTION_##flag
#DEVICE_FUNCTION \
template <bool IsOnDevice> \
DEVICE_FUNCTION_RESOLVER(IsOnDevice)
を試してみました。 #ifをマクロ(または何か)にカプセル化する方法はありますか?
ありがとう!私は、ホストとデバイスの機能を区別するのが簡単だとは知らなかった。 –