gpt4 book ai didi

c++ - 我应该用 'if' 语句统一两个相似的内核,冒着性能损失的风险吗?

转载 作者:IT老高 更新时间:2023-10-28 12:35:06 24 4
gpt4 key购买 nike

我有 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com