Posted to Hatena Blog Cより高速なCommon Lispコードを書く - 八発白中 blog.8arrow.org/entry/2014/10/…
2014-10-23 06:30:53Common Lispは、チューニングしたプログラムをREPLで部分コンパイル→ベンチマーク→良くなってたらコミット→さらにチューニング、のサイクルがかなり速く回せるのも高速なプログラムを書くのに向いているな、と思った
2014-10-23 17:50:31Cのhttp-parserの最適化オプションを直して、fast-httpをさらに高速化したら、Common LispがCの1.7倍速くなって不気味なので誰か間違いがあったら指摘してほしい github.com/fukamachi/fast…
2014-10-26 19:18:26「普通に考えてCommon LispがCより遅くなるわけがない」と言って即座に同意を得られるあたり最高のコミュニティ #lispmeetup
2014-10-30 00:21:44もし速度の面でCommon Lispを疑うのなら、なぜCLはCより速くなり得たか、そしてそれが一般的であると言える理由、Cのhttp-parserをさらに高速化する方法とそれが現実的に難しい理由、などを11月末の #lispmeetup でお話しますのでぜひお越しください
2014-10-30 01:18:52僕が普通に HTTP パーサ書くと picohttpparser になって、たぶんそれより速い実装はどのプログラミング言語であっても相当に困難だろうと思ってる
2014-10-30 14:34:37一方では、Cだと文字列と連想配列を含む大域的な最適化を行いにくい、っていうのは事実としてあったりするから、どういう発表になるか気になる
2014-10-30 14:35:52というわけで、C言語を用いた高速なHTTPパーサとサーバ実装の具体例については来週月曜の #http2conf で話しますのでよろしこ
2014-10-30 14:37:47高速なコードを書く際に意識すべきことって、基本的に、処理完了までに実行される命令数と、パイプラインをストールしないこと、の2点だと思ってる
2014-10-30 14:40:34picohttpparserについていうと、HTTPリクエストの5割以上の部分で1オクテットについて高率で予測が当たる条件分岐1回にまで抑え込んであるので、速さには一定の自信をもっているのです。SIMD化も割と簡単にできるとは思うけど、そこまでする必要がないのでやってない
2014-10-30 14:54:03kazuhoさんのpicohttpparserはかなり速いことが分かった。これに勝つにはリミッターを外さねばなるまい… (宣言を (safety 0)にしながら)
2014-10-30 20:00:00Now fast-http is 2 times faster than C http-parser, and 1.2 times faster than picohttpparser.
2014-10-31 02:05:09@nitro_idiot 試してみたのですが、fast-httpのページにあるpicohttpparserの測定結果がおかしいような気がしました。手元だと gist.github.com/kazuho/5f1c4c0… のように4倍ほど速い結果になります
2014-10-31 05:41:24仮に測定ミスだったとしても fast-http のほうが高位のレイヤで必要な処理をいろいろやってるし、とても高速なパーサであることは変わらんと思うけど
2014-10-31 05:45:34@kazuho おっと、僕の環境でも同じ結果になりました。picohttpparser.o を使って計測していたんですが、.cのほうが正しいですか?
2014-10-31 05:52:58@nitro_idiot あー、make test で作られる .o を使ったとしたら、最適化されてませんね。これは混乱しますね。すみません
2014-10-31 05:54:11.@kazuho pointed out the benchmark was using a wrong object file. It's 3.7 times faster than fast-http. Amazing.
2014-10-31 06:04:21Perhaps I need to rewrite http-parse-headers aggressively to make it even faster. I'm not sure it will be 4 times faster, though.
2014-10-31 06:44:44