我正在使用 nvidia 的展开循环指令,但还没有找到有选择地打开它的方法。
可以说我有这个...
void testUnroll()
{
#pragma optionNV(unroll all)
for (...)
...
}
void testNoUnroll()
{
for (...)
...
}
在这里,我假设两个循环最终都被展开。为了阻止这种情况,我认为解决方案将涉及在我想要受影响的块之后重置指令,例如:
#pragma optionNV(unroll all)
for (...)
...
#pragma optionNV(unroll default) //??
但是我不知道将展开行为重置为初始/默认设置的关键字。如何才能做到这一点?如果有人还可以指出 nvidia 编译器指令的一些官方文档,那就更好了。
目前看来只是最后#pragma optionNV(unroll *)
使用程序中找到的指令(例如,在最后一行中抛出一个指令,它会覆盖上面的所有内容)。
根据这个帖子在 NVidia 论坛上,之后没有关键字会将其设置为默认行为:
#pragma unroll 1 将阻止编译器展开循环。
如果 #pragma unroll 之后没有指定数字,则如果循环的行程计数恒定,则完全展开循环,否则根本不展开。
我不确定它是否适用于 GLSL,但你可以尝试:
#pragma optionNV(unroll)
如果有人尝试这个,请告诉我们它是否有效!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)