-2

この質問の目的のために、私はビッグオーの計算には興味がありません。私が理解しているように、アルゴリズムを相対的に比較するために使用されますが、アルゴリズムの実行にかかる絶対時間の見積もりが必要です。

たとえば、フレームあたり約 200 万回の計算を実行するビジョン アルゴリズムを使用しています。このプログラムは、core-i7 デスクトップで実行されます。では、どのくらいかかりますか?

この時間を計算するには、最悪の場合の計算としてどの CPU 操作を使用する必要がありますか (*、/、+、.. 浮動小数点数など)。

4

3 に答える 3

1

1 秒あたりの浮動小数点演算を使用して、アルゴリズムの最悪の場合に必要なフロップを計算できます。また、特定の (そして十分に大きな) 入力サイズでアルゴリズムの時間を計り、時間計算量分析を使用して最悪の場合の実行時間を見積もることもできます。

于 2013-03-06T05:05:11.053 に答える
1

実行時間はアーキテクチャによって大きく異なる可能性があるため、何らかの方法で実行時間のベースラインを取得する必要があります。

たとえば、キャッシュ ミスは 300 CPU サイクルを消費する可能性がありますが、キャッシュ ヒットがある場合、同じデータ アクセスは 5 サイクルしか消費しない可能性があります。すべての変数アクセスを合計すると、長期的には実行時間が大幅に変わる可能性があります。

したがって、特定の入力サイズでのアルゴリズムの実行時間を把握する必要があります。次に、それを予想される複雑さ (Big-O の複雑さ) と一致させます。次に、主要な定数の近似値を推測すると、妥当な入力に対するアルゴリズムの実行時間の近似値が得られます。

合理的とは、スワッピング/ページングなどのまったく異なる動作に遭遇しない入力を意味します (基本的に、実行時間についてはあまり考えられません) 。

于 2013-03-06T05:12:12.697 に答える
1

これ以上の情報がなければ、意味のある答えはおそらく不可能です。

まず第一に、これらの操作をいくつ並行して実行できるかに大きく依存します。最初に、理想的なケースを考えてみましょう。並列で完全に実行するようにコードを最適化しました。各コアはクロック サイクルごとに 4 つの命令を実行します。

この場合、1 クロック サイクルあたり 16 命令をリタイアするので、200 万/16 = 125000 クロック サイクルになります。4 GHz では、31.25 マイクロ秒になります。

反対に、コードが完全にシリアルであると仮定してみましょう。クロック サイクルごとに最大 1 つの命令がリタイアします。さらに悪いケースとしては、シリアルであるだけでなく、メモリ バウンドが激しいため、(たとえば) 100 クロック サイクル (平均) ごとに 1 つの命令だけがリタイアする可能性があります。この場合、同じ数の命令を実行するのに 50 ミリ秒かかり、1000 倍以上遅くなります。

もちろん、これらは非常に極端な例です。より典型的なケースとしては、1 クロック サイクルあたり平均 1.8 命令のキャッシュ ミスが数十命令発生する場合があります。おそらく 2.5 コアの平均使用率では、1 クロック サイクルあたり平均 4.5 命令が得られます。これにより、444444 クロック サイクルが得られ、111 マイクロ秒になります (ここでも、4 GHz を想定しています)。

于 2013-03-06T05:15:54.547 に答える