我有以下使用循环展开的代码:
#pragma unroll
for (int i=0;i<n;i++)
{
....
}
在这里,如果 n 是一个定义的常数,则一切正常。然而,如果 n 是一个变量,性能就会急剧下降。我注意到大约有 3 次指令被发出和执行。我想我正在寻找一种在运行时展开循环的方法,这可能是不可行的。
CUDA 是一种编译语言。循环展开是一种编译器优化。运行时循环展开意味着某种运行时解释器或动态代码生成。这显然不可能发生。
这是有道理的unrolledcase 执行的指令与朴素循环一样多或更多,因为编译器将用循环内容的重复来替换循环。如果展开的案例执行less指令,这意味着编译器正在预先计算部分或全部循环内容并用恒定结果替换代码。
这完全取决于循环中包含的内容。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)