Мы пишем код Cuda, который также должен компилироваться не-cuda-компиляторами (мы используем: nvcc, gcc и clang).
Поскольку Cuda требует повсюду эти аннотации __host__ __device__, мы решили эту проблему, включив в каждый рассматриваемый файл следующий заголовок:
Наше решение:
Код: Выделить всё
// CudaTags.hpp
#ifndef CUDAFLAGS
#define CUDAFLAGS
#ifndef __CUDACC__
#define __host__
#define __device__
#endif
#endif
Код: Выделить всё
#include "CudaTags.hpp"
__host__ __device__ func();
Пока я не вижу никаких (за исключением Примечания ниже) проблем с этим подходом. Таким образом,
- Видите ли вы какие-либо проблемы, которые я пропустил?
- Какие еще существуют возможности решения этой проблемы? ?
Конечно, я тоже мог бы сделать
Код: Выделить всё
#ifndef CUDAFLAGS2
#define CUDAFLAGS2
#ifndef __CUDACC__
#define CUDA_HOST
#define CUDA_DEVICE
#define CUDA_MANAGED
#define CUDA_GLOBAL
#else
#define CUDA_HOST __host__
#define CUDA_DEVICE __device__
#define CUDA_MANAGED __managed__
#define CUDA_GLOBAL __global__
#endif
#endif
Код: Выделить всё
CUDA_HOST CUDA_DEVICE void func();
Подробнее здесь: https://stackoverflow.com/questions/766 ... -compilers