【问题标题】:CUDA Warp DivergenceCUDA 翘曲发散
【发布时间】:2015-08-19 16:55:09
【问题描述】:

我正在使用 cuda 进行开发并且有一个算术问题,我可以在有或没有经线分歧的情况下实施。 有了经纱发散,它看起来像:

float v1;
float v2;
//calculate values of v1 and v2
if(v2 != 0)
  v1 += v2*complicated_math();
//store v1

没有经线分歧,版本看起来像:

float v1;
float v2;
//calculate values of v1 and v2
v1 += v2*complicated_math();
//store v1

问题是,哪个版本更快?

换句话说,与一些额外的计算和添加 0 相比,扭曲禁用的成本是多少?

【问题讨论】:

  • 你查过类似的问题吗? stackoverflow.com/q/16739248/156811
  • 感谢您标记其他线程。但是我之前查过。这些问题有不同的核心。所以我决定问这个问题。
  • 没有更多的上下文是不可能的。编译器比你(和我)聪明得多,而且没有一个可以编译、反汇编和运行的完整示例(这正是你应该做的),没有办法回答这个问题。

标签: cuda gpu-warp


【解决方案1】:

您的问题没有单一的答案。这在很大程度上取决于额外计算的数量、发散频率、硬件类型、尺寸和更多方面。最好的方法是简单地对两者进行编程并使用分析来确定在这种特殊情况和情况下的最佳解决方案。

【讨论】:

  • 好吧,我担心这样的事情,但不应该是关于线程禁用速度的一般性声明?
猜你喜欢
  • 2015-12-10
  • 2014-12-09
  • 1970-01-01
  • 2019-09-28
  • 1970-01-01
  • 2015-01-10
  • 2013-05-20
  • 2015-01-23
  • 2014-01-18
相关资源
最近更新 更多