【问题标题】:cuda performance constraints: conditional branchingcuda 性能约束:条件分支
【发布时间】:2014-03-25 13:38:08
【问题描述】:

伙计们,我想知道一些与条件分支相关的 cuda 性能。我有以下代码

if(i==5)
i=10;
else
i=5;

现在,如果我使用以下语句而不是这个,它会消除 cuda 中的 n/2 性能瓶颈吗?

i=(i==5)?10:5;

提前感谢您的帮助。

【问题讨论】:

    标签: cuda


    【解决方案1】:

    您所指的“n/2 性能瓶颈”大概是由于条件分支导致的扭曲发散。

    很可能在您展示的任一公式中,编译器将使用predicates 来完全避免分支,并且可能两种情况都将编译为相似或相同的机器代码。

    编译器将积极使用谓词执行以避免分支和扭曲分歧。

    一般来说,从 C/C++ 源代码对机器行为做出有效推断是相当困难的。相反,通过编译为 ptx (nvcc -ptx ...) 来比较这两种情况,或者更好的是使用cuobjdump -sass my_executable 进行普通编译和转储机器代码。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多