2004年10月08日
D3DXCreateEffectFromFileの妙
私が日記?を書かないときは、忙しいか遊びすぎかのどっちかです。基本。
とりあえず、研究のため微妙に激しいシェーダを書いていて気がついたことを一つ書いておいて見る。
*D3DXCreateEffectFromFileはシェーダの激しさによって結構時間に差が生じるっぽい?
PixelShaderの方に適当な静的ループを作って、その中の処理回数を増やしてみたわけですよ。いわゆるアンローリング状態。すると、D3DXCreateEffectFromFileの実行時間が著しく変化してしまったわけです。
また、ループの回数を変えても著しく変化してしまいました。
…まぁ、前のケースはともかく、後のケースはおかしい。
PSアセンブラレベルで考えると、定数の値が一つ違うだけです。それなのに、D3DXCreateEffectFromFileの実行時間が何倍にも膨れ上がるんです。なんでだろう。
さて、こういう質問はどこに振ればいいんだろうか。BBXか2chしか思いつかん。もしくは某JAISTの人のサイトか…?(blogのコメント欄に振った話題で大変申し訳ありません…。
ちなみに、実験に使ったソースコード掲載。
float4 PS ( VS_OUTPUT In ) : COLOR
{
float4 Color = {0.0f, 0.0f, 0.0f, 0.0f};
float2 TexA; float2 TexB;
float pos;
int i; int k;
TexA = In.Tex; TexB = In.Tex;
for(i=0; i<128; i++){
k = 0;
pos = (float)(i+k*128)/F_SIZE;
TexA.x = pos; TexB.y = pos;
Color = Color + (tex2D( Samp1, TexA ) * tex2D( Samp2, TexB ));
k ++;
pos = (float)(i+k*128)/F_SIZE;
TexA.x = pos; TexB.y = pos;
Color = Color + (tex2D( Samp1, TexA ) * tex2D( Samp2, TexB ));
}
return Color;
}
プログラムの一部を強引に抜き出したため、意味不明なソースコードなのは気にしない方向で。
実際にはforの中の二つ目のブロックを10個くらい複製して時間稼ぎしてますが、forの範囲(ここでは128)を一桁減らしたりするとかなり差がつきます。何故。
お暇な方は是非ともテストして結果を教えてください…と思ったけど、誰がこの記事を理解できるんだろうと考えて途方に暮れてみる。合掌。
投稿者 togabito : 2004年10月08日 10:17
Trackback Pings
このエントリーのトラックバックURL:
http://aaa.jspeed.jp/~togabito/cgi-bin/mt/mt-tbx.cgi/60