Похоже, вы включили aes.cu из main.cpp, что, как правило, не очень хорошая идея.Если вам нужно смешать код хоста и устройства, вы должны делать это в файлах .cu, скомпилированных с помощью nvcc.Если у вас есть функции, которые должны вызываться как из кода хоста, так и из кода устройства, вы можете объявить их так:
__host__ __device__ int foo() { return do_something(); }
Однако обратите внимание, что в этих функциях вы не можете использовать специфичные для устройства конструкции, такие как threadIdx.x
,Если у вас есть функция __device__ __host__
, которая должна использовать специфичные для устройства конструкции при работе на устройстве, вы можете заключить этот код в #ifdef __CUDA_ARCH__
:
__host__ __device__ int sharedFunction {
#ifdef __CUDA_ARCH__
return threadIdx.x * do_something();
#else
return do_something_on_the_cpu();
#endif
}