__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__ 变量不支持动态初始化?

__block的本质是变量的二次封装与引用----__forwarding

python中的变量生命周期

全局写入时出现分段错误

Python面向对象特性 - 封装

阶段1 语言基础+高级_1-2 -面向对象和封装_17构造方法