这(在GLSL顶点着色器中)会更快吗?
float f1, f2, f3, f4;
float v1, v2, v3, v4;
vec4 m = vec2(f1*v1, f2*v2, f3*v3, f4*v4);比这个更重要?
float f1, f2, f3, f4;
float v1, v2, v3, v4;
float m1, m2, m3, m4;
m1 = f1*v1;
m2 = f2*v2;
m3 = f3*v3;
m4 = f4*v4;已更新
那这个案子呢?
vec4 m = vec2(f1/v1, f2*v2, f3+v3, f4-v4);发布于 2014-03-20 18:55:30
使用下降编译器,这两个代码应该产生相同的机器二进制。在这种情况下,您应该关注可读性。一个简单的代码如下所示:
vec4 f = vec4(f1, f2, f3, f4);
vec4 v = vec4(v1, v2, v3, v4);
vec4 m = f * v;那这个案子呢?
下降编译器可能会将代码保留为标量(或标量simd)单元。它将试图找到类似的指令,并将它们打包为VLIW,SSE风格的指令。它还可以查看其他指令及其依赖关系,然后命令指令以改进缓存、流水线、无序执行、并行ALU、使用MAD、FMA等指令。它实际上取决于硬件和编译器/优化器的行为。通常,编译器不会做似乎是正确的事情。相反,它将试图减少缓存冲击和注册压力,允许隐藏延迟的机会。
https://stackoverflow.com/questions/22542228
复制相似问题