コンピュータって実に危ういところで動いてるのですか?

2007-09-16 - 未来のいつか/hyoshiokの日記

並列に実行しちゃうことをOut of Order (OOO)実行とか言っちゃうのだけど、(厳密に言えばOOOは並列に実行することを含意していない。実行順が機械語の順番と違うことを言っているだけ)、それによって、ある命令列によって引き起こされる効果を、他の人が観察すると機械語と違う順序で観察されるのである。例えば、あるアドレス(X) にAレジスタの値を代入し、次のアドレス(X+1)にBレジスタの値を代入するなんていう命令列では、Aレジスタの値が代入されてからBレジスタの値が代入されるなどという順序は、プロセッサは保証していないのである。(ああああ〜)


すげー
確かに並列実行とアウトオブオーダーから考えれば、こういう事が起きるのは当たり前なのか。。
今までは、何か凄い技術があって、最終的な実行結果は誰が実行しても全く変わらないのかなぁ、と思ってた。
でも、実際はかなり危うい所で、凄いバランスの所で動いてるのでしょうか。
javascriptみたいに。

というようなことで昨今のプロセッサではメモリのコピーと言う非常に単純な操作ですら、外部からは命令の実行順を保障した形では観測できないのである。

シングルプロセッサでは、そーゆめんどうな事は、通常は観測できない。しかし、マルチコアになると、あるコアで書き込んだものを別のコアで利用するなんていうことが日常茶飯事で発生するのであるが、それについては別途なにがしかの方法が必要になってくるのである。


イマイチ理解出来ない。 まぁその辺りの知識が無いから当たり前だけど。
シングルプロセッサでは全く問題にならないのですけ?
誰か偉い人おすえてー


追記
はてブより

2007年09月16日 AYBABTU これはひどい 説明が不十分かつ不完全で、マシン語初心者は混乱するだけ。

bear.mini : Out of Order (アウトオブオーダー)実行って・・・


なんだか難しい話らしいです。