ToDo:
これが面白いと教えてもらったので ざっと見たらおもしろかった。
http://www.springerlink.com/content/q841550258302383/
なんか一般的なライブラリをスレッドセーフにすると シングルスレッドなアプリだったりすると mutex のロックが無駄になるけど、 それをなんとか、みたいな話。
全スレッドが一個ならロックしねーとかもアリだけど 結局 Java とかみたいに必ずスレッド作るような ややこしいシステムで意味ないのでダメ。
結局、
でこれだとロック起きまくるとすごく遅いので、 何回か遅いパスに来たら普通のロックにするとか。
あとは pthread_self みたいなのを常に レジスタに置いとくように処理系いじるとかなんとか。
(22:22)
土曜に病院行って ステロイド1週間塗って後は他の薬でなんとかしろという指示を 受けつつ、かゆみが減る飲み薬をもらったので 塗ったり飲んだりしている。
あとあやしげな水ももらいました。 酸化水らしい。 普通の水を電気分解して酸性の方だけ取り出したとかなんとか。 ペットボトル一本100円。 アルカリイオン水涙目。
結果として
って感じで、まぁとにかくねむい。
(22:29)
がなんとなくアレだと思ってしまうのは、 とりあえず LLVM に翻訳しとけば 色んなアーキテクチャで JIT できてある程度速くなる、ってのが、 なんでも JS に翻訳しとけば色んなアーキテクチャで、 tamarin の JIT である程度速くなる、 って言ってるのと同じくらい他人任せな感じがするんだよな、とかいう。 てか IronMonkey とか実現したらまさに第二 LLVM みたいな 感じだよなぁ。
まぁ既存のランタイムとの親和性みたいなのを考えると、 matz Ruby とかみたいにランタイムが C だと LLVM の方がやりやすそうだなぁとか思うけど まぁなんにせよ本気で速くしたいんなら ランタイムのかなりの部分はその言語自身で書くなり、 C=>LLVM のパスで作っといたりしといた方がいいんだろうなぁ。
(22:40)
前 | 2008年 7月 |
次 | ||||
日 | 月 | 火 | 水 | 木 | 金 | 土 |
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
全てリンクフリーです。 コード片は自由に使用していただいて構いません。 その他のものはGPL扱いであればあらゆる使用に関して文句は言いません。 なにかあれば下記メールアドレスへ。
ふむ。LinuxでもCPUが壊れたときにそのCPUをOSから切り離す処理なんかは、いつ壊れるかなんか予想できるかボケーの理論によってそんな感じの実装だねぇ
FIFOポリシーの優先度MAXスレッドをCPU個数分だけ作って、うは、絶対俺以外うごいてねーぜーって状態にしてからウダウダと実行したりとか。
stop_machine_run() でぐぐってちょ。
もうじきはいる、自己コード書き換えフレームワークも同じ仕組み。びっくりなことにモジュールアンロードごときでも同じ事をしているので油断すると簡単にデッドロックする。
結論としてはImmediate Valueかわいいよ.
話は変わるが、ottawaでMathieuが関数をnopにするよりもブランチにあたえる定数値を書き換えたほうが速いといっていたのはちょっとビックリ。
彼曰く呼びもしない関数のためにスタックフレームつくってD-cache参照ふやすなんてバカ。
あ、上に「他のスレッドを停止させた後に」とか書いてありますけど、「クリティカルセクションに入ろうとしてる他のスレッドが停止することを保証させた後に」なのでかなり状況違うかと…
あと branch に与える定数書き換えって、
f:
...
ret
call f
を
f:
...
ret
call next
next:
にしちゃうって話かと最初思ったのですけど、そうではないですよね(スタック調整できん)。
いやいや、カーネルモジュール抜くときは全スレッドがそのカーネルモジュールの関数を実行していない事をPCレジスタチェックして調べるので同じじゃないかな。
ああ、となると、全スレッド調べる vs 1スレッドだけ調べるって違いですかねえ。