ご存知のように、qrintfは、ccacheやdistccと同様の仕組みでCコンパイラのラッパーとして動作する、sprintf(とsnprintf)の最適化フィルターです。
qrintfを利用することで、整数や文字列をフォーマットするsprintfやsnprintfは最大10倍高速化され、また、H2Oのようなhttpdが20%程度高速化することが知られています。
今回のリリースは、0.9.1以降に行われた以下の改善を含んでいます。
- 数値の変換速度の改善(@imasahiro氏による)#9 #10
- Clangへの暫定対応と、それにともなうコマンドラインインターフェイスの変更 #13 #16
-DQRINTF_NO_AUTO_INCLUDE
オプションによる、自動#include
の抑止 #14%.*s
への対応 #7
以下の実行例からも、GCCでもClangでもIPv4アドレスの文字列化ベンチマークにおいて、qrintfを利用することで10倍以上の高速化が実現できていることが分かります。
$ qrintf --version v0.9.2 $ gcc -O2 examples/ipv4addr.c && time ./a.out 1234567890 result: 73.150.2.210 real 0m2.512s user 0m2.506s sys 0m0.003s $ qrintf gcc -O2 examples/ipv4addr.c && time ./a.out 1234567890 result: 73.150.2.210 real 0m0.173s user 0m0.170s sys 0m0.002s $ clang -O2 examples/ipv4addr.c && time ./a.out 1234567890 result: 73.150.2.210 real 0m2.487s user 0m2.479s sys 0m0.004s $ qrintf clang -O2 examples/ipv4addr.c && time ./a.out 1234567890 result: 73.150.2.210 real 0m0.220s user 0m0.214s sys 0m0.002s
今後は、qrintfをH2Oにバンドルすることで、qrintfの恩恵をより多くの利用者に届けて行きたいと考えています。同様のことは、他のソフトウェアプロジェクトでも可能なのではないでしょうか。
それでは、have fun!
No comments:
Post a Comment