-3

我正在使用 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 相比,扭曲禁用有多昂贵?

4

1 回答 1

1

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

于 2015-08-19T17:04:47.590 回答