[Essay] コンピュータを構成してるモノ…AppleのM1チップに寄せて

Apple社が新チップM1をベースにしたMacを発表し、あちこちで大騒ぎになっているが、時々妙に勘違いしてる話も聞こえてくるので、ちょっと書いてみた。一連の話を読むときに、アタマに入れておくといい情報をならべておいたつもり。

●コンピュータって?

イニシエより、いわゆるノイマン型のコンピュータ(以下、コンピュータ)の基本的な構成ってのは、たぶんほとんど何にも変わってない。それは「記憶部(いわゆるメモリ)」「計算部(いわゆるCPU)」「入出力部(いわゆるインターフェース)」に大別できる。無論、補機としての電源部もあるけど、ここではそういうのはチョイと傍に置く。

計算部は、記憶部にある命令を順番に読んでいき、その通りに計算し、計算結果を記憶部に戻す。その繰り返しの中で、時々入出力部から情報をもらい、また情報を返すコトで、外部とのやり取りを行なっている。

この一連の命令群のコトをプログラム、もしくはソフトウエアと呼ぶ。

実はコンピュータのやってるコトって基本的にはコレしかない。これをどれだけ高速に行うかとか、高速に行うためにどんな細工をするのかという話はあれど、原則はコレしかないのよな。まず、ココが重要なポイント。

●命令セットアーキテクチャって?

基本的に今あるコンピュータは数値で動いている。記憶部が覚えられるのも、計算部が計算できるのもすべて数値なのだが、そうすると先の命令も数値で実装される必要がある。つまり、何番の命令ならどうしろってコトを決めておき、それを計算部に作りこんでおいて、記憶部に並べた命令用の数値を順番に読み取るコトで、一連の命令を得る仕組みになっている。

で、ここで賢明な方はお気づきだと思うが、何番にどんな命令を定義するのかは自由なんだよね。そして、それを決めるのは「コンピュータ自体を設計した人」だ。組み立てパソコンを組み上げた人のコトではないよ。そこに乗っているCPUなりMPUなり呼ばれているチップの中身を設計した人が、それを自由に決めるコトができる。

しかし、あまりに毎回違う定義を行うと、過去のプログラムとの互換性がなくなる。当然やな。なので、大昔に決めた定義をそのまま使うコトが多い。もしくは、その拡張をしていくとかね。今主流になっているIntel社の系列の場合、その大元は大昔に発売された8086ってチップに定義した命令を元にしている。その後、80186、80286と進んでいったので、命令の定義としてはx86って言い方をする。

もちろん、世の中には他にも色々あって、旧Motorola社の68000系とかIBM社のPowerPC系とか、そして今回のArm社のArm系とか、みんな異なる命令の定義を持っている。なので、これらの間ではプログラムに互換性がない。なんでこんなコトになっているのかというと、基本的には先に書いた「より高速に動かすための細工」のため、数値上の命令の定義自体も弄ってチューニングしてると思ってもらっていい。

(当然と言えば当然やが、この定義を他社が使って揉め事になったりもする)

こんな感じで、それぞれ自分たちで決めた命令の定義集を持っている。これを命令セットアーキテクチャ、もしくは単に命令セットと呼んでいる。

●組み立て(自作)パソコンって?

さて、いわゆるWintelなパソコンの場合、今やと適当にマザボ買ってきてCPUとメモリ買って、適当に積み上げればハイ完成ってコトで、普通にWindowsが動作するワケだが、なんでこんなコトができるのか、よく考えたコトがある人はどれぐらいいるだろうか。大抵はそんなの当たり前と思うのかもしれないが、実は当たり前でも何でもなく、結構な苦労が入っている。

というのも、実は命令の定義が自由なのと同じぐらい、入出力部の実装も自由だったりする。ココも高速に動作させるためのチューニングが入る余地があり、さまざまな世代で色々な実装方法が行われてきた。

実は、Wintelパソコンの場合は暗黙の了解的に、一番最初に出た仕様を最低限の互換として維持していたりする。その上で、新しい機能を動かすプログラムが補助に入り、より高度な動作を実現している。大抵、この部分のプログラムのコトを特別にデバイスドライバ、もしくはドライバと呼ぶ。

こういった機能が内包されているので、何も知らない人でも気軽に組めるようになってるのが、いわゆる組み立てパソコンの世界なんやな。

●今回、Apple社が発表したことって?

さて、ここで話をApple社のM1チップに向ける。

まず入ってる情報として、このチップはArm系の命令セットを実装してるとされる。つまり、この時点で他のCPUの命令セットを使ったプログラムは受け付けないコトになる。次に、インターフェースも新規に設計されているようだ。というコトは、既存のArm系用に書かれたプログラムでも当然そのままでは動かないコトになる。インターフェースが新規なら、既存のプログラムはそのコトを知らないので、アクセスなんてできないワケだから。

なんでこんなコトをやる(やれる)のかと言えば、理由は二つある。

まず一つ目は、Arm社って会社はちょっと変わってて、自社では一切の現物を作っていないコト。この会社は「計算部の設計」だけに特化した会社で、売り物はその設計データなんだよね。ソレをどう料理するのか…つまり、どんな記憶部を取り付け、どんな入出力部を取り付けるかは、データを買った会社次第だ。計算部の設計にも種類があって、スマホとかパソコン向けの奴もあれば、小さなアイテム向けのもある。

ちなみに、ヲイラが仕事で使っているFreescale改めNXPって会社のチップも、内部の計算部にはArm社の設計を使っている。Arm社の設計って、それぐらい幅広く使われているんやね。

逆に、Intel社とか他の会社ってのは、大抵は記憶部だけは外部だけどそれを接続するクチとか、入出力部をまとめたチップなんかも合わせて設計し、チップセットとして物理的な部品を販売しているんだな。だから、その部分は他社の自由にはならない。

二つ目は、Apple社自身がイチからプログラムを組み上げて、いわゆるOSを実装している会社だから…だ。新規のインターフェースにはソレ用のデバイスドライバ等が大量に必要になるが、元々全て自前でやってるので、全部自分達で書いてしまえば済むワケやね。

一般に言われるクロック数ってのはあくまで計算部の速度の指標であって、入出力部のコトではない。けど実は、コンピュータとしての性能ってのは計算部の性能だけでは済まないのよ。その結果が外部に出てくる時間や、逆に情報を外部から得る時間も含めて一般には性能と見なされてる。例えば写真を縮小しろと指示して実際に縮小され表示されるまでの時間…とかね。となると、この入出力部のチューニングは大きな意味を持つワケ。

しかも、当然だけどそれはデバイスドライバと密接に関わっている。となると、デバイスドライバの設計と入出力部の設計は同時並行にやるのが一番理にかなってるワケだ。Apple社自身がCPUチップまで設計する意味はココにあると思ってイイだろう。

同時にこれらの事は、M1チップの内部でどんな高速化のための細工を行なっているのかを公表する必要もないというコトを意味する。まぁ、そのうち公表するのかもしれないが、基本的には自前でチップを設計し、ソフトウエアを全部書いてしまえるというコトは、そういうコトを意味するんだよね。

これは恐ろしく強みになる可能性を秘めている。他社が追いつけないモン作って発売した場合、その秘密が真似されるまでにはそれなりの時間が必要になるからね。

また、他のOSを移植しようにも、その内部がわからなければ移植しようがない。無論、OSの上のアプリケーションとしてエミュレーションを行えば実装できるだろうけど、それは当然フル速度ではない。便宜的に使えるってコトにすぎない。

こういう状況の上に、あの値段でモノを出してきたというのは、そりゃ恐ろしいコトが始まる前触れってコトになるワケだ。

現状認識としては、以上のコトぐらいを頭にいれておくと、たぶんわかりやすいんぢゃないかしら。

以上

(ARM表記は現在ではArm表記ではないかというご指摘を頂いたので、修正しました。ありがとうございます)

Zak について

基本的にヲタクです。いや、別に萌えとかいうのではなく、ハマるとトコトン進めようとする癖があるので、自制が必要だという…。
カテゴリー: Apple, 日常, 書き物 パーマリンク