作爲GLSL着色器的新手,我注意到在我的舊上網本中,爲完美運行的着色器添加一行代碼可能會突然使執行時間增加數千倍。什麼導致GLSL着色器的性能突破點?
例如該片段着色器立即運行而limit
的值是32或更低,需要10秒運行一次limit
的值是33:
int main()
{
float limit=33.;//runs instantly if =32.
float useless=0.5;
for(float i=0.;i<limit;i++) useless=useless*useless;
gl_FragColor=useless*vec4(1.,1.,1.,1.);
}
什麼混淆我以及是加一個或多個useless
自乘法出的32圈循環不會導致急劇的時間增加。
這是一個沒有for循環的例子。它運行在我的電腦上一毫秒內有6次sin
計算,並添加第七一人突然使得程序花費約500ms的運行:
int main()
{
float useless=gl_FragCoord.x;
useless=sin(useless);
useless=sin(useless);
useless=sin(useless);
useless=sin(useless);
useless=sin(useless);
useless=sin(useless);
useless=sin(useless);//the straw that breaks the shader's back
gl_FragColor=useless*vec4(1.,1.,1.,1.);
}
在我自己不太過時的計算機,編譯時間變得之前太大我可以找到這樣一個突破點。
在我的上網本上,我預計隨着操作的增加,運行時間會不斷增加。
我想知道是什麼原因導致這些突然的飛躍,因此如果這是一個問題,我應該地址,計劃瞄準相當廣泛的蒸汽觀衆。如果有用,這裏是上網本我正在做我的測試http://support.hp.com/ch-fr/document/c01949780和它的芯片組http://ark.intel.com/products/36549/Intel-82945GSE-Graphics-and-Memory-Controller
另外我不知道它是否重要,但我使用SFML運行着色器。