我在玩nvidia的unroll loops指令,但是还没有找到有选择地打开它的方法。
可以说我有这个...
void testUnroll()
{
#pragma optionNV(unroll all)
for (...)
...
}
void testNoUnroll()
{
for (...)
...
}
在这里,我假设两个循环最终都会展开。为了阻止这种情况,我认为解决方案将涉及在要影响的块之后重置指令,例如:
#pragma optionNV(unroll all)
for (...)
...
#pragma optionNV(unroll default) //??
但是我不知道将展开行为重置为初始/默认设置的关键字。如何才能做到这一点?如果有人还可以为nvidia的编译器指令指向一些官方文档,那就更好了。
当前,似乎只使用了程序中找到的最后一个
#pragma optionNV(unroll *)
指令(例如,在最后一行中抛出一个指令,它将覆盖其上方的所有内容)。 最佳答案
根据NVidia论坛上的this post,事后没有关键字会将其设置为默认行为:
#pragma unroll 1将阻止编译器展开循环。
如果#pragma展开后未指定任何数字,则循环的行程计数为常数将完全展开,否则根本不会展开。
我不确定它是否适用于GLSL,但您可以尝试:
#pragma optionNV(unroll)
如果有人尝试过,请告诉我们是否可行!