我有 2 个非常相似的内核函数,代码几乎相同,但略有不同。目前我有两个选择:
- 编写 2 种不同的方法(但非常相似)
- 编写单个内核并将不同的代码块放在 if/else 语句中
if 语句会在多大程度上影响我的算法性能?
我知道没有分支,因为所有 block 中的所有线程都会进入 if 或 else。
那么如果内核函数被多次调用,单个 if 语句会降低我的性能吗?
最佳答案
您还有第三种选择,即使用 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>();
关于c++ - 我应该用 'if' 语句统一两个相似的内核,冒着性能损失的风险吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6179295/