gpt4 book ai didi

performance - GLSL:为什么 const int 数组比普通数组慢这么多?

转载 作者:行者123 更新时间:2023-12-02 12:41:07 25 4
gpt4 key购买 nike

我有一个用 glsl 编写的 OpenGL 着色器。我在标题顶部有一个全局定义的数组,如下所示:

const int permutations[256] = int[256](
64 , 34 , 36 , 137 , 120 , 122 , 246 , 46 , 79 , 10 , 37 , 181,
...
);

当我启动程序时,它非常慢,这意味着当使用着色器显示一个简单的茶壶时,我每秒只有 1 帧。

但是,一旦我从上述声明中删除“const”,一切都会正常工作,并且我又回到了交互式帧速率。

所以,“问题”实际上已经解决了......但我想知道,为什么会出现这种情况?非常违反直觉,根据我的经验,使用 const 通常会使程序更快

<小时/>

更新

我实际上尝试首先使用 Uniform 而不是 const int 数组,在其他地方都使用完全相同的代码。但是,在这种情况下,编译着色器会崩溃:

Internal error: assembly compile error for fragment shader at offset
34609:
-- error message -- line 651, column 22: error: invalid local parameter number

最佳答案

这很奇怪。您很可能遇到了驱动程序问题。我已经在 Windows 下的 Nvidia 540M 上运行了包含的着色器代码,并让它循环运行。在那个周期中,我调用了着色器程序一次并测量了时间(我还检查了变换反馈是否着色器工作正常)。大多数周期在 2-3 毫秒内结束,一些峰值在 25 毫秒内结束。然而,删除 const 标识符对性能没有影响。这些是需要测量的相当小的值,但从您的描述来看,即使在这里,也应该可以观察到 const 的性能影响。

#version 150
const int permutations[256] = int[256](
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21,
...
246, 247, 248, 249, 250, 251, 252, 253, 254, 255
);

flat out int num1[32];

void main(){
for(int i = 0; i < 32; i++){
num1[i] = (permutations[2*i]+permutations[2*i+1])*(permutations[2*i+2]+permutations[2*i+3]);
}
}

如果您不介意的话,也许我可以尝试在我的硬件上运行您的程序,但它必须针对 Windows 进行编译,并且请包含所有动态库。

关于performance - GLSL:为什么 const int 数组比普通数组慢这么多?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8338467/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com