なるせにっきスマートフォン用の表示で見るなるせにっきこの広告は、90日以上更新していないブログに表示しています。例のmatzにっきだけじゃないかな公開されてる情報はとりあえず他は知らないですねえ。あれってどっかの発表だっけ。発表資料もあるのかな口頭発表はそれなりにしている感RubyConfのキーノートでしょ?札幌でも日本語で同じ内容を...へーhttp://www.slideshare.net/yukihiro_matz/rubyconf-2010-keynote-by-matzとりあえず。matzにっきより詳しい気はしない。ささやんの論文ではだめなのですか?浮動小数点数プールを使うやつだっけdoubleにVALUEを埋め込むやつだっけimmediateってhttp://atdot.net/~ko1/activities/rubyfp2008_PPL2008.pdfあー、逆転の発想だVALUEの中身がそのまま?doubleには無効なビット並びがたくさんあるので、それを活用できる。VALUEに埋め込みだからまったく面白くなかった。あの膨大な数のNaN値は、そこに何かを埋め込めと言われている気はする。IEEE754しかし浮動小数点レジスタとvoid*が乗るレジスタは普通違うのでそのへんのレジスタ転送ペナルティがどんくらいあるのかはきになる。普段の性能が劇的に低下することが容易に想像できるよね...まあでもやってみないとわかんないかPen4でSSEならレジスタ数が増えてかえって速い可能性もあるが。VALUEだと言い切りつつfloatをimmediateにすると言い切ってるのでいったいどういうトリックなのか非常に気になっているわけであります。ささだ君がたしか、NaNにポインタを埋め込んでる処理系の話をしてた記憶がある話をして色々考えた結果がさっきyuguiさんが貼ったPPLのやつではruby-stdではfloatの精度はどうなってたろうFloatがあったかどうかすら怪しい。少なくともFixnumはない。意味を与える!いや確か他の処理系で、floatの表現に手を付けずにNaNに埋め込んでる奴があるって「浮動小数点数など無い」あ、もしかしたらshiroさんだったかもしれないやなにがうれしいんだそれは>doubleのnanにfloat何にもうれしくないな。うれしくないなだれがうまいことをいえとしかし、俺も前にそのアイデア自体をささやんに聞いたことがあるような気がする。23ビットが使えて俺は田中さんに聞いたけどね。VALUEに「float」を埋め込む技は特に誰も思いついてないだな。ムリと「float」が実は非常に低精度というのくらいですか。さんの実ポインタじゃなくてヒープインデックスとかであれば十分入るか。僕もヒープのインデックスなら可能だろうと思っていたけど、やっぱり遅いか遅いと言ってるけど、言うほど遅くはないかもしれない。この辺はプロ(=研究者)に聞きたいところ。ポインタを生で扱わない方が他のテクニックが活用できて処理系全体としてはいいかもしんないし。mmapでMAP_FIXEDで妥当っぽいアドレスにメモリが割り当てられればインデックス==アドレスとかに最適化できるのではないかという気はする。doubleだと52ビット(-1個)かコピーGCとか出来るように実行するプロセスでアドレス空間共通にしないでよくなったりVALUEが32ビットなのにFloatをimmediateにできるんか、というのが元の話題でしたっけはい。先生どうぞRiteVMの謎に迫る。VALUE)という話題がありました。いうわけで、その辺通過したので、がーん元に戻って、で、RiteVMはどーやる気なんだ誰かしらねーか周回遅れというところでございます。http://tinyurl.com/26mjwhbVMは32bitワードでレジスタベースと書いてあるがVALUEが32bitとは一言も言ってない!なので、VALUEは128bitくらいです^^レジスタベースVMで、レジスタが32ビットでそこが甘い。VALUEは64ビット?レジスタが32bitではない(または、32bitじゃないレジスタもある)のではないか。8080の子孫を扱ってる皆さんには常識的な嫌な構成AレジBレジとあって、ABレジを対象として操作できるとまあ、別に結合できなくてもいいけど。お隣のレジへ並んでくださいアキュムレータとフラグレジスタをくっつける狂気の発想どちらも演算結果と見れば素直ポインタは32ビットだけどVALUEは64ビット。浮動小数点数をdoubleにするかfloatにするかこれを選べる時点でもうVALUEは32bitじゃないじゃんVALUEでもたないという選択肢も。可変長ポインタ!そもそもポインタだとは言っていない気がするうん...VALUEにこだわる必要全然ないのか。・浮動小数点数はimmediate(shootout対策w)。hits)こんなのがあったのか。RiteVMはまつもとさん設計,福岡の人実装だと思ってたんだけどまつもとさんが設計,実装らしいというか実装してるのは知ってるけど設計ってやってんのかな...福岡の人はなに担当?まつもとさんに1億払ってRubyを再実装してもらう意外といいかもしれないまつもとさんが福岡に行ったり行かなかったりしながら実装しているので。考えたがやっぱりよくわからないなimmediate。実装見たら納得するんだろうか。用のヒープが分かれてるとか間接参照した時点でimmediateって言わないんじゃない?というあたりで悶々としてます。immediate,というのは割と楽そうなそうですねんーでもdoubleを組み立てるコストは掛かるんだなコード埋め込みかなぁやっぱiseq相当に。田中さんは入れたくないっぽい雰囲気でしたよねそれだとそれで終了ですなもうちょっとうまい作りになると思うもうすこしブラッシュアップしたいらしいですよNArrayそのままだとデファクトだからこれででいけるけど、ブラッシュアップするともっと他の人がいいの作るかもとなって、入らなくなる互換APIがあればいいんじゃねという気はする。64bitだとポインタ64bitはむしむしむしむしQIA-64はアドレス空間64ビットですがx86-64は48ビットだったりしますねぇdoubleは即値だがポインタは間接参照です(キリッというわけで解決した。それを頼るとあとがこわいけどつーかrubyで試せばいいんだけどな。どれくらい性能が変わるか。浮動小数点数使うとは黄金比な奴じゃslapだってfibくらい動くからなあ。動いてなくても設計は終わってるのではという意味で。そこは基本的にLuaと同じです。要る?32bitだと明言してたので、96bitです。64bitまるまる入れる前提?で、trick使わないと3word必要なのかねそういうことになるのかな。valuesとりあえずこれはint=32bit?lua_Numberは、とdoubleふむ。値じゃないオブジェクトのうち、GC管理下にあるものこの間、ささださん所で、Squirrelの本を読んでいてLuaには数値型は浮動小数点オンリーという話を初めて知ったJavaScriptがそうでしたっけ?そういえばそんなことがJSもそうですねJavaScriptはJavaScriptのレイヤーに見えているのは浮動小数点数だけだがだからといって概念に整数がないわけではないたとえば配列のインデックスとかは整数そうかうーん普通にTValueのポインタを回していて、別に楽しくなかった。http://tinyurl.com/33cu5njTValueが本体か、なんだつまらん(おいついたRubyのVALUEのほうがつおいじゃんそれ、VALUEとRVALUEじゃん全然面白くない。要するに全てが間接参照になっただけと言える。値渡しじゃなかったっけポインタ回すのか勘違いしてたな俺の目にはそう見えた。読み間違えてるかもしれないので確認してね。ういlobject.hとlstate.hでする96bit値渡しだと性能どうなんでしょうね実はそんなに悪くならないんじゃないかと思うんだがどうかな。値渡しだと思っていて,それで速いって凄いね,とまつもとさんと話をした記憶がやっぱりTValue*だね。スタックがTValueの配列として事前にどっかーんと確保されている?45個の配列をどっかーんと確保していた。ほーどういう用語を使えばいいのかよくわからないが、rubyでいうところのCメソッドみたいなものは、それぞれが直接スタックを覗くので、TValueやTValue*が引数で来るわけじゃない。lmathlib.c冒頭のmath_absがLuaのabsの実装なんだけどご覧の通りさ。引数はどうやって渡してるんだ。ん?スタックに積むんじゃない?なる俺が気になるのは、「さて問題です。このC実装メソッドは引数を何個取るでしょう?」というのがどこにもなさそうに見えるということだ。