stu*_*hlo 1 c++ templates cuda
我有一个带模板参数的全局内核函数:
template<int ARG> __global__ void kernel(array[]) {
int threadID = blockDim.x*blockIdx.x + threadIdx.x;
if(...) {...}
}
Run Code Online (Sandbox Code Playgroud)
函数的行为和特殊的if语句条件在考虑模板参数时略有不同,但是主体保持不变.让我们说:
ARG == 0
if语句如下:if(expr1){body}
ARG == 1
if语句如下:if(expr2){body}
ARG == 2
if语句如下:if(expr1 && expr2){body}
我的问题是提供这种方法的最佳方式(在可读性和性能方面)是什么?
编辑:
表达式expr1
和函数expr2
调用__device__ boolean
,例如fnc1(array[threadID])
和fnc2(array[threadID])
.
直截了当的做法是蛮力:
if ((ARG != 1 || expr1) && (ARG != 0 || expr2)) ...
Run Code Online (Sandbox Code Playgroud)
由于ARG在编译时是已知的,因此编译器将在此处生成良好的代码.