私はコードを書きましたが、データは次のとおりです。
unsigned char buf[4096]; // data in chunks of size 4k
unsigned counter[256];
連続する 3 バイトごとに i/p データを合計し、ans を格納しています。例: 温度[4096]; temp[0] = buf[0] + buf[1] + buf[2]; ... 4096年まで
次に、次のコードを使用して、temp の結果からヒストグラムが生成されます。
for(i = 0; i < 4096; i++)
counter[temp[i]]++;
ヒストグラムはソート (バブルソート) され、最も頻繁に発生する上位 8 つの値が取得されます。コードは Linux カーネル (2.6.35) で実行されます。
私が直面している問題は、ソート部分を削除すると、コードの実行にかかる時間が非常に速くなることです (ラップトップで 6 マイクロ秒、gettimeofday 関数を使用して測定)。しかし、並べ替えを導入すると、プロセスが大幅に遅くなります (44 マイクロ秒)。ソート機能自体には 20 マイクロ秒かかりますが、なぜそんなに時間がかかるのか理解できません。cachegrind を使用してメモリ分析を行いましたが、結果は正常であり、プリエンプションを無効にしようとしましたが、それでも違いはありません。誰かがここで私を助けることができれば. ありがとう!