データ請求Iは、コードの一部を書かれている:Cコード - メモリアクセス/プリエンプション
unsigned char buf[4096]; // data in chunks of size 4k
unsigned counter[256];
私はすべての3つの連続したバイトのためのI/Pのデータを加算し、ANSを記憶しています。 ex:temp [4096]; temp [0] = buf [0] + buf [1] + buf [2]; ... 4096
までヒストグラムは、コードを使用して、温度の結果から生成される:
for(i = 0; i < 4096; i++)
counter[temp[i]]++;
ヒストグラムがソート(バブルソート)し、次いで8最も繰り返し値が取られている先頭です。コードはLinuxカーネル(2.6.35)で実行されます
私が直面している問題は、コードを実行するのにかかる時間が非常に高速です(私のラップトップで6マイクロ秒、 gettimeofday func)。しかし、ソーティングを導入した後、プロセスは大幅に遅くなります(44マイクロ秒)。ソート機能自体は20マイクロ秒かかるので、時間がそんなに長くなっているのがなぜ分かりません。私はcachegrindを使用してメモリ解析を行いました。結果は正常で、プリエンプションを無効にしてみても、まだ違いは見られません。もし誰かが私をここで助けてくれるなら。ありがとう!
なぜバブルソート?どうして 'qsort()'を使うのですか? –
トップの値を8つ取得するには、完全なソートを行う必要はありません。例えば。 HeapsortはN個のトップ値を得るために使うことができます(実装されている場合)。これはフルソートより高速です。 – osgx
または選択ソートhttp://en.wikipedia.org/wiki/Selection_sort - トップ8の値を取得した後に停止することができます。 – osgx