0
현재 프로젝트에 CUDA를 사용하고 있으며 단일 구현으로 CPU와 GPU 커널을 유지 관리해야합니다.#define #if의 #if에 대한 최선의 대안은 무엇입니까
__device__ __host__
으로 태그를 지정할 수 있지만 장치 전용 기능을 사용해야하는 경우 코드를 분할 할 수 없습니다. 그래서, 나는 다음과 같은 솔루션과 함께 올라와있다 : 그러나 같은
//Macro:
#define DEVICE_FUNCTION \
template <bool IsOnDevice> \
#if IsOnDevice \
__device__ \
#else \
__host__ \
#endif
//Example function:
DEVICE_FUNCTION
...the rest of the function header
로, 이제
template <bool IsOnDevice>
#if IsOnDevice
__device__
#else
__host__
#endif
...the rest of the function header
, 나는이 부분을 캡슐화하는 정의 #이 코드를 배치 할,이 '아무튼 다른 사전 프로세스가 매크로에 포함될 수 없으므로 컴파일하지 마십시오. 토큰이 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가 매크로 (또는 다른 것)에 코드를 캡슐화 할 수있는 방법이 있습니까?
감사 : 여기
은 예입니다! 나는 호스트와 장치 기능을 구별하기가 쉽다는 것을 알지 못했다. –