__shared__ 变量可以封装在 __device__ __host__ 函数中吗?
Posted
技术标签:
【中文标题】__shared__ 变量可以封装在 __device__ __host__ 函数中吗?【英文标题】:Can __shared__ variables be encapsulated in __device__ __host__ functions? 【发布时间】:2016-07-12 20:44:04 【问题描述】:我想封装以下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 预处理器指令不能在宏中使用。有没有办法封装这段代码?
【问题讨论】:
【参考方案1】:我所要做的就是将#ifdef 移到#define 之外,doh!
#ifdef __CUDA_ARCH__
#define SHARED_MEMORY __shared__
#else
#define SHARED_MEMORY
#endif
【讨论】:
请记住几天后再回来接受这个答案,这样问题就会从 CUDA 标签的未回答列表中消失以上是关于__shared__ 变量可以封装在 __device__ __host__ 函数中吗?的主要内容,如果未能解决你的问题,请参考以下文章
如何修复警告:函数范围的静态 __shared__ 变量不支持动态初始化?