2014-02-22 98 views
0

关于GLSL MAD(“乘法和加法”)优化问题。glsl - =疯狂优化

根据这http://www.opengl.org/wiki/GLSL_Optimizations我们应该帮助GLSL编译器优化mad表达式。这一切都清楚形成我

result += x*y 

它不应该是这样的:

result = x*y + result 

但随着做什么 - =?

result -= x*y 

如果我写道:

result = result - x*y 

这会不会是 “乘法和加法”
如果:

result = -x*y + result 

是否优化呢?我担心因为-x

只是想澄清这件事给自己。

回答

2

真的很难猜测特定的编译器/优化器在特定情况下会做什么。对于GLSL,你有这样的情况,即存在大量不同的实现(以及它们的版本)。

一般而言,我认为result += x*y永远不会导致另一个优化结果比result = result + x*y - 它只是语法糖,而不是一些不同的操作。

如果你想看看一些编译器为你的代码做了什么,我建议你看看AMD's shader analyzer,它会告诉你编译器的结果。另外,您可以使用CG toolkit中的nvidia's command line compiler,它们也编译GLSL。它只会输出ARB汇编级别的顶点/片段程序,而不会向您提供真正的指令级代码,但它仍然允许您查看优化器在您的GLSL构造中制作MAD的位置。

+0

AMD的着色器分析仪是否适用于nVidia卡? CG工具包有一些GUI吗?还是......那怎么样 - =? :)) – tower120

+0

它适用于nVidia。它可以在操作数上添加“ - ”:)) – tower120

+0

@ tower120:AMD shader分析器完全独立于GPU工作:它只是编译代码并进行静态性能分析。 NVIDIA®(英伟达™)CG编译器也适用于CPU。对于我建议在这里使用它的情况,GPU并不重要。我不知道任何GUI,毕竟它是编译器。 – derhass

2

只是添加其他资源: http://www.humus.name/Articles/Persson_LowLevelThinking.pdf 是一种很好的方法,你可以引导编译器走向更优化的代码。

该建议不是特定于glsl的,但是当我看到您的问题时我想到了这个问题,因为他确实强调您应该编写一个很有可能会煮到MAD指令的代码。

+0

真的很好的文章,谢谢。 – tower120