我有一個模板(CUDA,雖然適用於C++)函數(我已經簡化以使點)如下:「毫無意義的比較」警告在模板與某些值
template<unsigned windowsize>
__global__ void someFunc()
{
if (threadIdx.x < (32 - windowsize * 2))
{
// ... something exciting
}
}
我使用「windowsize」代碼設置爲1-16。的Visual Studio 2013中使用nvcc編譯,我得到以下警告:
warning : pointless comparison of unsigned integer with zero
這顯然是針對情況下windowsize = 16(針對if語句的計算結果爲threadIdx.x < 0,也就是假的),所以警告確實有道理。
我看過類似的問題: How to silence a particular "pointless comparison of unsigned with zero" warning?但這是在使用typedef而不是模板,所以答案不適合的情況。
有沒有更好的方法來構建這個功能,它將提供相同的功能,而不會有警告?我可以創建單獨的函數來處理windowsize大於和小於16的不同,但實際上函數更復雜,我覺得我不必要地重複並且使代碼複雜化,這是使用模板開始的全部要點用。
雖然這解決了這個問題,它是編譯器已經爲我做的事情的額外代碼行。 – valjean