我試圖在CUDA中實現我自己的64位shuffle函數。但是,如果我不喜歡這樣寫道:重載CUDA shuffle函數使得原始函數不可見
static __inline__ __device__ double __shfl_xor(double var, int laneMask, int width=warpSize)
{
int hi, lo;
asm volatile("mov.b64 { %0, %1 }, %2;" : "=r"(lo), "=r"(hi) : "d"(var));
hi = __shfl_xor(hi, laneMask, width);
lo = __shfl_xor(lo, laneMask, width);
return __hiloint2double(hi, lo);
}
所有後續調用__shfl_xor將從這64位版本的實例,不管參數的類型是什麼。舉例來說,如果我做
int a;
a = __shfl_xor(a, 16);
它仍然會使用雙版本。 解決方法可能使用不同的函數名稱。但是因爲我從一個模板函數調用了這個shuffle函數,所以使用不同的名稱意味着我必須爲64位浮點創建不同的版本,這並不完美。
那麼我怎麼能重載__shfl_xor(double,...)函數,同時仍然確保__shfl_xor(int,...)可以被適當調用?
@RoBiK感謝您的評論... – Rainn 2013-04-11 21:49:48