Pebble Coding

ソフトウェアエンジニアによるIT技術、数学の備忘録

smartgrep高速化

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

https://github.com/pebble8888/smartgrep

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