有关GLSL MAD(“乘法和加法”)优化的问题。
根据这个http://www.opengl.org/wiki/GLSL_Optimizations,我们应该帮助GLSL编译器优化疯狂表达式。
让我很清楚result += x*y
应该看起来像:
result = x*y + result
但该怎么办 - =?
result -= x*y
如果我写道:
result = result - x*y
这不会“倍增并添加”
如果:
result = -x*y + result
它是否优化了它?我担心因为 -x
只想向自己澄清这件事。
答案 0 :(得分:2)
很难猜出特定编译器/优化器在任何特定情况下会做什么。使用GLSL,您可能会遇到许多不同的实现(及其版本)。
一般来说,我希望result += x*y
永远不会导致另一个优化结果而不是result = result + x*y
- 它毕竟只是语法糖而不是一些不同的操作。
如果你想看看一些编译器为你的代码做了什么,我建议你看一下AMD's shader analyzer,它会告诉你编译器的结果。此外,您可以使用nvidia's command line compiler中的CG toolkit,{{3}}也可以编译GLSL。它只会输出ARB汇编级顶点/片段程序,而不会显示真正的指令级代码,但它仍然可以让你看到优化器从你的GLSL结构中创建MAD的位置。
答案 1 :(得分:2)
只是添加另一个资源: http://www.humus.name/Articles/Persson_LowLevelThinking.pdf 对于可以将编译器引导到更优化的代码的方法来说,这是一个很好的尝试。
建议不是glsl特定的,但是当我看到你的问题时我想到了它,因为他确实强调你应该编写一个很有可能逐渐深入到MAD指令的代码。