2011-02-04 18 views
0

誰かが知っていたか、正確なスピードテストの1つがテストできるかどうか疑問に思っていました Actionscript 3では "それ以上"と "それ以上"違いがあればAir 2.5)?"より小さくない"対 "より大きい"と等しい速度

私はこのコンピュータ上で仮想マシンを実行しており、非常に不正確な結果になっています。私はそのすべてやっは1回のテストであるため、最初のものを考えて、それを反転させるが、ActionScript 3のは、それらのいくつかを持っているだろうな

if (!(__index < _vector.length)) return; 

または

if (__index >= _vector.length) return; 

としてそれを使用して

あなたは決して確信が持てません。

答えて

2

理論的にはスピードの違いはあってはいけません。 ActionScriptでは、nanojit JITライブラリを使用してコードをコンパイルしています。比較をインバージョンするコードでは、比較の逆転などの単純な変換が変換されるという事実(MozillaのJavaScriptエンジンでは、以前はAdobeのActionScriptとnanojitを共有していました)逆の比較に変換する。理論上、唯一の違いはコードをコンパイルするのに費やされるもう1つのサイクルか2つです。これは心配する価値がありません。

一方、現代のCPUは複雑な獣であり、微小な摂動は顕著な違いを生むことがあります。だから私は両者の間に違いがないという強い確信を抱いているが、私はそれに農場を賭けていないだろう。

+0

ありがとうございます。コンパイル時間は問題ありません。 – WORMSS

1

あなたの質問はコンピュータスクリプトよりもはるかに最適なマシンコードにコンパイルしようとするほとんどの言語のように、特にアクションスクリプトよりも重要です。

私はあなたの質問に答えるためにC++の例を使用します。

int j = 16; 
if (!(j < 10)) 
{ 
    int l = 3; 
} 

if (j >= 10) 
{ 
    int l = 3; 
} 

これは、アセンブリに次のキー部生成:

00231375 cmp   dword ptr [j],0Ah 
00231379 jl   wmain+32h (231382h) 
0023137B mov   dword ptr [l],3 
00231382 cmp   dword ptr [j],0Ah 
00231386 jl   wmain+3Fh (23138Fh) 
00231388 mov   dword ptr [l],3 
0023138F xor   eax,eax 

ライン00231375と00231382は、if文に含まれている実際のテストです。お分かりのように、私の<と> =の両方のテストは、アセンブリ内で同じコードとしてコンパイルされていました(2つの整数を比較する場合)。したがって、どちらのテストでも同じテストになります(ブロックされている場合はスキップして、<)。これは、アクションスクリプトコンパイラの場合に当てはまります。

しかし、JITコンパイラがコンパイルに時間がかかります([int] < [int])または[int]> = [int]の場合は、1つの質問があります。私の推測では、その違いがおそらく問題ではないということです。

+0

ありがとう、コンパイル時間は問題ではありません..ちょうどコードの実行。 – WORMSS

-1

ループを作成し、getTimer()を使用して検出します。

var startTime:int = getTimer() 
var count:int = 1000000 
for (var i:int = 0;i<count;i++) { 

    if (!(__index < _vector.length)){ 

    } 
} 
trace("The first script took "+String(getTimer()-startTime) + "ms to run") 



startTime = getTimer() 
for (i = 0;i<count;i++) { 

    if (__index <= _vector.length){ 

    } 
} 
trace("The second script took "+String(getTimer()-startTime) + "ms to run") 

また、このテクニークで無駄な結果が得られる場合は、カウント変数を大きくしてみてください。ループから "_vector.lenght"検証を削除するだけで、 ">"と "> ="の性能を確認する必要がある場合に便利です。

+0

はい、私はそれを行う方法を知っています。私の質問をもう一度読むと、なぜ私は他の人に仮想マシンのためにそれをするように頼んだのか分かります。 – WORMSS

関連する問題