読者です 読者をやめる 読者になる 読者になる

Pebble's Diary

プログラマーの作業メモ

smartgrep高速化

smartgrepを高速化してみました。

結果、5倍近く高速化することができました。
- 試したことその1
mmapの利用
ファイルサイズ分のメモリを確保しファイル内容をすべて読み込む手法ですが試したところ、全く高速化されませんでしたので不採用。
- 試したことその2
マルチスレッド化
マシンのコア数に応じて複数のスレッドで検索処理を並列に行います。MacBookAirだと4コアなので、1つをディレクトリの検索処理、3つを文字の検索に使います。ただし、出力順序が崩れるので、それが嫌な場合はこの機能を使わないオプションも追加しました。この対応だけで、2.5倍高速化しました。
- 試したことその3
Instrumentでボトルネックを計測
Xcodeに付属したInstrumentのTimeProfilerでボトルネックになっている箇所を特定しました。結果無駄なmemsetで時間がかかっていることが分かったので、修正しました。
これで2倍高速化しました。