【问题标题】:Can __shared__ variables be encapsulated in __device__ __host__ functions?__shared__ 变量可以封装在 __device__ __host__ 函数中吗?
【发布时间】: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 预处理器指令不能在宏中使用。有没有办法封装这段代码?

【问题讨论】:

    标签: cuda shared-memory


    【解决方案1】:

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

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

    【讨论】:

    • 请记住几天后再回来接受这个答案,这样问题就会从 CUDA 标签的未回答列表中消失
    猜你喜欢
    • 2016-01-18
    • 2020-10-29
    • 1970-01-01
    • 2021-08-30
    • 1970-01-01
    • 2020-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多