我有一个带有模板参数的全局内核函数:
template<int ARG> __global__ void kernel(array[]) {
int threadID = blockDim.x*blockIdx.x + threadIdx.x;
if(...) {...}
}
考虑到模板参数,函数的行为以及特别的 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])
。