GLSLシェーダの新機能であるため、古いネットブックでは、完全に動作するシェーダに1行追加すると、突然実行時間が数千倍になる可能性があります。GLSLシェーダでこれらのパフォーマンスブレークポイントが発生する原因は何ですか?
例えば、このフラグメントシェーダは、値が33であるS「limit
の値32以下で、かつ一度実行するように10秒かかる」limit
をしながら、瞬時に実行されます。
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.);
}
にも私を混乱させる何追加するということです1つまたは複数のuseless
自己掛け算32ターンループのが鋭い時間を増加させることはありません。
ここにはforループのない例があります。それは6 sin
計算して自分のコンピュータ上のミリ秒以内に実行され、追加第七1が突然プログラムを実行するのに約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を使ってシェイダーを実行しています。