トップ «前の日記(2007-09-12) 最新 次の日記(2007-09-15)» 編集

U-memo

2006|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|08|
2009|08|10|
2010|02|03|
2011|11|12|
2012|04|
2016|02|
All= / Today= / Yesterday=

2007-09-13

_ [プロセッサ] マシン語を知らない子ども達のコメント

Shiroさん:

それと、「低レベルを知らなきゃならないって言い出すなら半導体、量子力学…ってなってきりがないんじゃ」という反応が見られたが、そういう人こそ論理回路と機械語を学ぶべき。論理回路のレベルで非常に強固な抽象化の壁があり、その下の層とはかなり独立性が高い (下層は真空管でもリレーでもパラメトロンでも歯車でも構わない)。その独立性の高さが、これだけ巨大なソフトウェアがその上に乗っかることを可能にしたわけだから。

なんで「論理回路」で切れるんだろうか。

NOT や XOR (ゲート)なんてのは飾り(低レイヤ過ぎる)で、むしろ register (=flip-flop) あたりが抽象化の切れ目のはず。順序回路ならば論旨として納得いくけど。(int が 32bit register とか見えてるからね!)

CPU の回路構成のほとんどメモリとレジスタとセレクタ(と配線)であって、セレクタの条件指定に組み合わせ回路(つまり NOT や XOR)が出てくる程度。

セレクタなんて今時は transmission gate がほとんどで AND-OR(=NAND-NAND) のような理解である必要はない(セレクタという抽象化で十分)し、flip-flop が(本質的には) NAND のフィードバック回路で出来ているとか RS-FF やら D-FF やら JK-FF やらの知識も不要だろうと思う(レジスタという抽象化で十分)。

セレクタの条件指定こそ組み合わせ回路だけれど、それにしたってソフトの if 文の条件式とやってることは同じ。論理ゲートしかないから論理ゲートを使っているだけに過ぎない。プログラマの基礎知識なんだから論理ゲートを学んだところで得るところはほとんど無い。

演算器(adder)だって基本は 1 bit full-adder とはいえ、32bit/64bitの加算機はダイナミックロジック(ドミノ回路)でできていたりして論理回路の知識で通用しないんだけど、こんなの知らなきゃならんとかマジか?(加算器があるで十分だろう)

というわけで(組み合わせ)論理回路なんてのは飾りなんですよ。

ハード的に言えば RTL がソフトから見える最下層だろうしそれで十分すぎる。ゲートレベル(or それ以下)の知識は(ハード設計者には必須だが)ソフト屋に必要とは全く思えない。

それとももはや「論理回路」= Verilog or VHDL = RTL なんですかね(泣

というわけでVHDLゴルフすると良いと思うよ! (設計にもRTLの勉強にも役に立ちません)

_ [雑記] odz buffer - どこまで必要か のコメント

shiro 『私は元のshi3zさんのエントリの「機械語を理解する」は「ストアドプログラムアーキテクチャ+MMU+特権管理+コンテキストスイッチングのメカニズムを理解する」

それは機械語ではなくて ISA (命令セットアーキテクチャ) を理解すると書かないとだれにも通じない気がしますー。 で、それなら参考文献は IA-32 インテル アーキテクチャー・ソフトウェア・デベロッパーズ・マニュアル だな。

_ [雑記] たわごと

CPU 設計者はアプリケーションやコンパイラの挙動まで調べて、頻出するクリティカルパスの最適化を CPU ハードに落とし込んでたんだからねっ! という点で論理回路はどうでも良いから CPU の構造というか性質というかは知ってほしいというか旨味を引き出してほしいとか思ったりする。

本日のツッコミ(全11件) [ツッコミを入れる]
_ うんの (2007-09-13 09:36)

なんか、熱くなり杉な感じが気のせいならいいのですが……。<br><br>「論理回路は抽象化されていて、その下を知る必要はないでしょ」という(私の誤読かもしれないが) shiro さんのコメントは、たしかによくわかりませんね。<br><br>それをいうなら、OS はハードを抽象化しているので、べつにその下を知る必要ないっぺ?<br><br>こんな風にいいあっても意味はないんです。<br><br>マシン語を学ぶと何がうれしいのか。それって、本当にマシン語でないと学べないのか?<br>マシン語さわったからって学べるもんなのか?ってとこが疑問なんだけど。

_ うんの (2007-09-13 09:38)

「論理回路」が鵜飼さんのツンデレ・キーワードらしいというのは、なんとなくわかりました!!

_ ukai (2007-09-13 09:44)

単なる「釣られ杉」でつ。<br><br>CPU の本質に近づくために奇怪語を、というのはあるかな。<br><br>>ツンデレ・キーワード<br><br>だって設計しているときに論理ゲートを明に意識することないもん。遅延時間ゴルフするときに初めて意識する感じ。

_ うんの (2007-09-13 09:50)

ぼくは NAND と Inverter が大好きです!(でした?)

_ うんの (2007-09-13 09:51)

そんなことより、加算器ちゃんにあやまれ!(笑<br>絶望先生にもだ!!

_ うんの (2007-09-13 14:02)

あー、僕もつられてしまいました。

_ shiro (2007-09-13 15:30)

まあ、どこまで下がればいいかについては異論があって構わないと思います (機械語じゃなくてISAというべき、というukaiさんの話は確かにそうですね)。私が主張したいのは、抽象化の壁の厚さの差を捨象して相対化してしまうことには弊害がある、ということなんです。<br><br>ふつうにWindows使ってプログラムが落ちて不正アクセスしたアドレス値やらレジスタの値やらがエンドユーザにまで見えたりしますから、その程度の抽象化の厚さってことですね。その下のマイクロコードが見えたり、「今日は暑いからからバスタイミングがずれてるなあ」みたいなことが見えることは(市販のマシンを使ってる限りは)ふつう無いと。だったらそのふたつの抽象化のレイヤを「どっちもブラックボックス。同じこと。」と考えてしまうのは間違いだろうと。論理回路を持ち出したのはその下との抽象化の壁がとりわけ分厚いと私が考えているからなんですが、「いや、こちらの壁の方が厚いでしょう」という議論はありだと思います。

_ うんの (2007-09-14 22:24)

なんか記憶の端に…<br><br>> CPU の本質に近づくために奇怪語を、というのはあるかな。<br><br>奇怪語って、誰かがどこかで TAOCP の MIX を指して揶揄した言い方でしたっけ。<br><br>ぐー、どこだったか。<br>たしか「大 Knuth ですら奇怪語を発明してよろこんでいる…」みたいな文だったような。

_ うんの (2007-09-14 22:26)

しまつた。ググったら一発だった。<br><br>「クヌースのような極めて優秀な数学者でさえ、「奇怪」語(訳註1)を教えているのだ。」<br>http://practical-scheme.net/trans/gigo-1997-03-j.html

_ ukai (2007-09-14 23:45)

shiroさん:<br>>不正アクセス<br><br>マイクロコードが見えることはないですね。というのと同じで論理回路が見えることもないかなと。壁の大きさの差は論理回路とトランジスタの間の方が大きいかもしれないですが、差を問題にしたいのではなく、<br><br>有意な壁の分厚さが、レジスタのあたりにあると思います。CPU やさんは頑張って ISA より下は隠蔽してる(はず)ので、そこまでがプログラマの降りる下限かと思います。<br><br>>「今日は暑いから」<br>...熱暴走、そこでトランジスタの知識ですよ!<br>プログラマからは離れますが、冷やせばクロックアップできるとかいう方面の人なら、(論理回路はすっとばして)トランジスタで動いている...という方向に突き進むのはあるかもです。<br><br><br>うんのさん:<br>> 奇怪語<br>奇怪語とか魔神語って少なくとも 80年代前半には普通に存在した言葉だと思います。

_ shiro (2007-09-15 09:00)

ふむ。確かにISAより下については、たとえバグとわかっててもソフト屋さんは手がでないので、バグ対応で降りる下限ってことだとISAとなりますね。論理回路の知識はどっちかというと抽象的なイメージの話か。「現場での必要性」と「教養としての知識」とを私が混ぜて議論してたのが混乱のもとである気がしてきました。現場での必要性ならISAで下限、で納得です。<br><br>「今日は暑いから」の話は、「明示された定格」のつもりで出しました。理屈を知らなくて、定格内で使っていたらほとんど気にする必要はないし、定格外になってたらおかしくなっても不思議は無いと (オーバークロッカーは自ら踏み出しているので対象外)。定格内での温度変化はもちろん半導体の動作に影響を与えまくりだけれど、デジタル回路はそこをマージンの中に押し込んじゃってるわけですよね。だから安心して使える。ソフトウェアでも厳密な世界(医療とか極地での制御系とか?)ならやってると思うんですが。下層の知識は必要無い、とまで言い切るならソフトの層でもそのくらいやるべきだよな、という思いがあったんですがそれはここでの議論とは関係ないですね。

_ uDiary:[Web] マシン語がどーとか (2007-09-13 14:01)

僕もちょっと釣られておこう。 僕自身は、「マシン語を知っている」ということ自体に価値をおいている。なので、マシン語を知っている方が良い面もあるよねー、ということには賛成できる。 というか、自分自身が、BASIC → Z80 機械語(ハンドアセンブル)→ X-BASIC (SHARP)..