2012-04-30 3 views
2

私は最近、C++でハフマンエンコーディングのCPU実装を構築しました。また、時間を比較するためにCUDAでGPUバージョンを構築しましたが、CPUの時間をテストするときに問題が発生しました。最初の実行後にCPUハフマン圧縮が速くなりますか?

大きなファイルを圧縮してストレステストを行う場合、たとえば97mbのテキストファイルアルファベットのアルファベットと他のアスキー文字のすべての文字は、CPUの実装は最初に実行するときに約8.3秒かかります。その後、時間は大幅に1.7秒に低下します。注:私は、CPUの周波数のカウントだけではなく、文字列のエンコーディングとファイルへの書き込みをタイミングしています。

これはどのような考えですか?私はすべてのファイルポインタを閉じているので、私が知る限り何もキャッシュするべきではありません。

ソースコードが必要な場合はお知らせください。ありがとうございます。

答えて

5
ファイルの内容がシステムによってキャッシュされている(そして、すべてのプロセスによって共有されている)最初の実行後

ので、次の実行は、あなたが実際にメモリからファイルを読んでいます。

+0

ファイルが最初に実行されるタイミング、またはシステムによってキャッシュされてメモリから読み込まれるタイミングを使用する必要がありますか?最初の場合、どのように私は実行していることを確認し、それはメモリから読み取られていないのですか? – SuperXero

+0

@superXero:私はrouglyのように私のシステム上のプログラムを持っている「{ながら、(真の)新しいのchar [1000];}しようとキャッチ(...を){0を返す;}」システムは、おそらくすべてのバッファにそれを洗い流すようになりますできる。通常、人々はちょうど2番目のタイミングを使用します。より簡単で信頼性の高い方法です。 –

+1

あなたが本当に望んでいるのは、IO操作で使われる時間がなくてもあなたのアルゴリズムで使われる時間です。私があなただったら、ファイル全体をメモリに読み込み、開始時間を記録し、メモリにファイル内容のアルゴリズムを実行し、終了時間を記録します。 – BlueWanderer

関連する問題