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