我正在用CUDA做一些计算机视觉的工作。以下代码大约需要20秒才能完成。
__global__ void nlmcuda_kernel(float* fpOMul,/*other input args*/){
float fpODenoised[75];
/*Do awesome stuff to compute fpODenoised*/
//inside nested loops:(This is the statement that is the bottleneck in the code.)
fpOMul[ii * iwl * iwxh + iindex * iwxh + il] = fpODenoised[ii * iwl +iindex];
}
如果我用
fpOMul[ii * iwl * iwxh + iindex * iwxh + il] = 2.0f;
代码几乎不需要几秒钟就能完成。
为什么指定的语句很慢,我怎样才能使它运行得很快?
最佳答案
当你修改代码时,编译器会发现你所有的fpdenoised代码都不再需要了,并且可以优化它。您修改的实际语句不是性能差异的直接原因。您可以通过查看每种情况下的ptx或sass代码来验证这一点。