2016-07-12 48 views
0

我想封裝下面的CUDA代碼:__shared__變量可以封裝在__device__ __host__函數中嗎?

__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評估是否__CUDA_ARCH__定義,或任何其他方式__shared__。以下是顯而易見的方法:

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

但是,這不會編譯,因爲其他c預處理器指令不能在宏中使用。有沒有什麼辦法來封裝這些代碼?

回答

0

我只需要將#ifdef移到#define的外面,呵呵!

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

請記住在幾天後回來接受這個答案,所以問題從CUDA標記的未答覆列表中脫落 – talonmies

相關問題