2016-07-12 29 views
0

我想封装下面的CUDA代码:__shared__变量可以封装在__device__ __host__函数中吗?

__device__ __host__ 
void myFunction() 
{ 
#ifdef __CUDA_ARCH__ 
    __shared__ float sharedVar[3]; 
#else 
    float sharedVar[3]; 
#endif 

    ... 
} 

为更精简,例如:

__device__ __host__ 
void myFunction() 
{ 
    SHARED_MEMORY float sharedVar[3]; 
    ... 
} 

凡SHARED_MEMORY评估是否__CUDA_ARCH__定义,或任何其他方式__shared__。以下是显而易见的方法:

#define SHARED_MEMORY \ 
#ifdef __CUDA_ARCH__ \ 
    __shared__ \ 
#endif 

但是,这不会编译,因为其他c预处理器指令不能在宏中使用。有没有什么办法来封装这些代码?

回答

0

我只需要将#ifdef移到#define的外面,呵呵!

#ifdef __CUDA_ARCH__ 
#define SHARED_MEMORY __shared__ 
#else 
#define SHARED_MEMORY 
#endif 
+0

请记住在几天后回来接受这个答案,所以问题从CUDA标记的未答复列表中脱落 – talonmies

相关问题