什么在GPU上更快?使用bool转换为int或使用分支声明?

时间:2016-08-22 17:19:12

标签: cuda gpu

我正在尝试使用CUDA来并行化模拟退火算法。我使用的GPU是NVIDIA GTX660。我正在努力加快程序的速度,为了做到这一点,我正在考虑更换这个

int r= rand();
if (condition) 
{
       r += 1;
}

int r = rand() + (condition)*1; 

我理解跳转/分支指令(比如if-then-else命令)是执行速度最慢的,但除非我的理解不正确,否则类型转换涉及内存访问,然后在访问之前将新位置的数字复制为int。 '条件'的结果是否可以存储在寄存器中并在ALU中输入而不进行修改?如果是这样,这不是一个更快的方法来计算变量r的值?以上内容在每个帖子上运行。

1 个答案:

答案 0 :(得分:2)

通常,你会非常努力地避免在GPU上进行分支,因为这通常是CPU需要暂停所有不通过该分支的线程的执行点,执行那些执行的操作,然后暂停这些操作,然后执行操作另一个分支。

话虽这么说,分支不会发生,因为你写if;它发生是因为你使用例如<根据您所比较的内容为寄存器赋值,但这非常取决于您的实际情况以及您所使用的语言/架构 - 我的知识来自第一代CUDA和可能不再完全适用了。