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

问题描述 投票:0回答:1

我想封装以下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];
    ...
}

如果定义了

SHARED_MEMORY
,则
__shared__
的计算结果为
__CUDA_ARCH__
,否则没有。以下是显而易见的方法:

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

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

cuda c-preprocessor gpu-shared-memory
1个回答
0
投票

我所要做的就是将

#ifdef
移到
#define
之外,哦!

#ifdef __CUDA_ARCH__
#define SHARED_MEMORY __shared__
#else
#define SHARED_MEMORY
#endif
© www.soinside.com 2019 - 2024. All rights reserved.