__shared__变量可以封装在__device__ __host__函数中吗?

时间:2016-07-12 20:44:04

标签: cuda shared-memory

我想封装以下cuda代码:

__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];
    ...
}

如果定义了__CUDA_ARCH__,则SHARED_MEMORY评估为__shared__,否则为空。以下是显而易见的方法:

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

但是,这不能编译,因为其他c-preprocessor指令不能在宏中使用。有没有办法封装这段代码?

1 个答案:

答案 0 :(得分:0)

我所要做的就是将#ifdef移到#define之外,干什么!

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