1

私はCコードを持っています, 最初の実行のためにコードを処理する小さな部分の時間を計算しようとすると. exeファイルをオフにして再度実行すると、30ミリ秒かかります.1ミリ秒になります。これは計算の時間であり、プログラムを実行するたびに、計算値は前のものとは異なります。 PCの電源を切って電源を入れると、最初の実行に30ミリ秒、他のすべての実行に1ミリ秒かかりますどうすれば同じ時間を取得できますか、使用済みメモリをすべて解放し、別のプログラムを実行してメモリを上書きしますが、問題PCを再起動するまで解決しない

start_time=clock();
Encryption();
end_time=clock();
cpu_time_used_totlal_enc +=(double) (end_time-start_time) / CLOCKS_PER_SEC;
4

1 に答える 1

6

この問題は「ウォームアップ」と呼ばれます。あるコードのパフォーマンス テストを行う場合、そのコードを数回 (たとえば 10 回) 実行する必要があります。次に、それを 100,000 回実行して、所要時間を測定し、それを 100,000 で割って平均を取得します。実行時間が少なくとも 1 分でない限り、実行時間を 1 回測定しても意味がありません。

ウォームアップの問題が発生する理由は、最新の OS と言語があらゆる種類のトリックを実行してコードを高速に実行するためです。たとえば、 への呼び出しEncryption()は、共有ライブラリ内の関数を実際に呼び出す場合があります。

これらのライブラリは遅延ロードされます。つまり、コードが実際に関数を呼び出すときに最初にロードされます。ロードされると、誰かが再びそれを必要とする可能性があるため、OS はそれをキャッシュに保持します。

そのため、アプリケーションの最初の数回の実行と、次の 10,000 回の実行の実行時間はまったく異なります。

于 2013-05-15T15:10:19.057 に答える