【发布时间】:2014-03-25 13:38:08
【问题描述】:
伙计们,我想知道一些与条件分支相关的 cuda 性能。我有以下代码
if(i==5)
i=10;
else
i=5;
现在,如果我使用以下语句而不是这个,它会消除 cuda 中的 n/2 性能瓶颈吗?
i=(i==5)?10:5;
提前感谢您的帮助。
【问题讨论】:
标签: cuda
伙计们,我想知道一些与条件分支相关的 cuda 性能。我有以下代码
if(i==5)
i=10;
else
i=5;
现在,如果我使用以下语句而不是这个,它会消除 cuda 中的 n/2 性能瓶颈吗?
i=(i==5)?10:5;
提前感谢您的帮助。
【问题讨论】:
标签: cuda
您所指的“n/2 性能瓶颈”大概是由于条件分支导致的扭曲发散。
很可能在您展示的任一公式中,编译器将使用predicates 来完全避免分支,并且可能两种情况都将编译为相似或相同的机器代码。
编译器将积极使用谓词执行以避免分支和扭曲分歧。
一般来说,从 C/C++ 源代码对机器行为做出有效推断是相当困难的。相反,通过编译为 ptx (nvcc -ptx ...) 来比较这两种情况,或者更好的是使用cuobjdump -sass my_executable 进行普通编译和转储机器代码。
【讨论】: