Rubyはなぜ遅いのか Rubyフルコミッター卜部さんが語る 400倍速くなる最適化アプローチ #RubyKaigi #RubyKaigiA
Rubyが何故遅いか? GCとかダイナミックとかいろいろ言われてきたけどそうではない。最適化されてないから。 #rubykaigi #rubykaigiA
2016-09-10 14:25:37「邪悪なことしないかぎりは」 #rubykaigiA
2016-09-10 14:26:57例えば1+2というコードはputobjectを2回してaddしてるが、最初から3とすればいい。どうしてそうしてないかというと、Integer#+を再定義可能だから。とはいえ、そんなことは邪悪なことをしないかぎりそうそうしない。 #rubykaigi #rubykaigiA
2016-09-10 14:27:11戦略。基本的には最適化して実行する。もし再定義されていたら最適化したのを捨てて再実行する。再実行分時はペナルティになるが、よくあるケースでは早くなる。SELFから導入したテクニック。JRubyなどでは個別に実装されている。 #rubykaigi #rubykaigiA
2016-09-10 14:28:28JRubyやRubiniusはdeoptimizationの機構が入ってるから、MRIより速い。 #rubykaigiA #rubykaigi
2016-09-10 14:28:29今回の戦略。JITと不可分な話だが、今回はnative codeへのJIT compileはせず、VMの実行シーケンスに変換する。 #rubykaigi #rubykaigiA
2016-09-10 14:29:24NumPyとかがやってるような数値計算向けの最適化とは異なる範囲の話だろか #rubykaigi #rubykaigiA
2016-09-10 14:29:3430分で60枚って書いてあったから、1枚30秒以上かかったらオーバー?(>_<) #rubykaigi #rubykaigiA
2016-09-10 14:30:02Rubyの内部実装の話。iseq_encodedとiseq_sizeがあるが、加えてiseq_deoptimizedとcreated_atを作る。 #rubykaigi #rubykaigiA
2016-09-10 14:31:10iseq iseq と出ているけど、よく分からないヒト向けに一言入れると iseq というのは Instruction Sequence のことです。 #RubyKaigi
2016-09-10 14:31:26Optimizing Ruby #rubykaigiA pic.twitter.com/gluYF8WKWs
2016-09-10 14:31:38Pure Cで書かれてるので移植性が高い。PCに影響を与えないのでVMの状態を気にしなくて良い。脱最適化していないシーケンスを保存しているので、何度も再定義された場合にも対応できる #rubykaigi #rubykaigiA
2016-09-10 14:32:36