__shared__变量可以封装在__device____host__函数中吗?
Can __shared__ variables be encapsulated in __device__ __host__ functions?
我想封装如下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 预处理器指令不能在宏中使用。有没有办法封装这段代码?
我所要做的就是将#ifdef 移到#define 之外,doh!
#ifdef __CUDA_ARCH__
#define SHARED_MEMORY __shared__
#else
#define SHARED_MEMORY
#endif
我想封装如下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 预处理器指令不能在宏中使用。有没有办法封装这段代码?
我所要做的就是将#ifdef 移到#define 之外,doh!
#ifdef __CUDA_ARCH__
#define SHARED_MEMORY __shared__
#else
#define SHARED_MEMORY
#endif