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

コメント

うにら @riafeed 2014年11月2日
2014年にもなってまだこの言語はCより速いとか言っちゃうのってどんだけ周回遅れなんだ・・・
nekosencho @Neko_Sencho 2014年11月2日
というかLISPって速かったのかって方向性では。過去チラッといじった程度なんだけど速さを要求する方面に使うってイメージではなかったし
Inetgate Writer @Inetgate 2014年11月3日
3日ほど前にHacker Newsでスレッドが立っていた件ですよね。https://news.ycombinator.com/item?id=8534866
ログインして広告を非表示にする
ログインして広告を非表示にする