lin*_*ina 34 c c++ optimization cuda gpgpu
我有2个非常相似的内核函数,在某种意义上代码几乎相同,但略有不同.目前我有2个选择:
if语句对我的算法性能有多大影响?
我知道没有分支,因为所有块中的所有线程都将输入if或else.
如果内核函数被多次调用,那么单个if语句会降低我的性能吗?
tal*_*ies 94
您有第三种方法,即使用C++模板,并使if/switch语句中使用的变量成为模板参数.实例化您需要的每个内核版本,然后您有多个内核执行不同的事情,没有分支差异或条件评估需要担心,因为编译器将优化掉死代码和分支.
也许是这样的:
template<int action>
__global__ void kernel()
{
switch(action) {
case 1:
// First code
break;
case 2:
// Second code
break;
}
}
template void kernel<1>();
template void kernel<2>();
Run Code Online (Sandbox Code Playgroud)